From 553e101f08ae836c7b7df6e6f132ef129298b7a5 Mon Sep 17 00:00:00 2001 From: Himanshu Date: Wed, 25 Jul 2018 12:06:17 +0530 Subject: [PATCH 01/10] layout banner added --- .../spree_digital_assets/asset_details.js | 4 +- .../spree/frontend/spree_digital_assets.css | 11 ++++ .../spree/admin/banners_controller.rb | 55 +++++++++++++++++++ .../spree/admin/base_helper_decorator.rb | 20 +++++-- .../spree/backend_configuration_decorator.rb | 1 + app/models/spree/banner.rb | 17 ++++++ app/overrides/add_banner_div_to_layout.rb | 6 ++ app/overrides/add_banner_tab.rb | 7 +++ app/views/spree/admin/banners/_form.html.erb | 32 +++++++++++ app/views/spree/admin/banners/edit.html.erb | 14 +++++ app/views/spree/admin/banners/index.html.erb | 38 +++++++++++++ app/views/spree/admin/banners/new.html.erb | 14 +++++ .../admin/digital_assets/_content.html.erb | 7 ++- app/views/spree/layouts/_banner_div.html.erb | 10 ++++ config/locales/en.yml | 7 +++ config/routes.rb | 3 + .../20180711131600_create_spree_banner.rb | 11 ++++ 17 files changed, 248 insertions(+), 9 deletions(-) create mode 100644 app/controllers/spree/admin/banners_controller.rb create mode 100644 app/models/spree/backend_configuration_decorator.rb create mode 100644 app/models/spree/banner.rb create mode 100644 app/overrides/add_banner_div_to_layout.rb create mode 100644 app/overrides/add_banner_tab.rb create mode 100644 app/views/spree/admin/banners/_form.html.erb create mode 100644 app/views/spree/admin/banners/edit.html.erb create mode 100644 app/views/spree/admin/banners/index.html.erb create mode 100644 app/views/spree/admin/banners/new.html.erb create mode 100644 app/views/spree/layouts/_banner_div.html.erb create mode 100644 db/migrate/20180711131600_create_spree_banner.rb diff --git a/app/assets/javascripts/spree/backend/spree_digital_assets/asset_details.js b/app/assets/javascripts/spree/backend/spree_digital_assets/asset_details.js index d516082..35a6f76 100644 --- a/app/assets/javascripts/spree/backend/spree_digital_assets/asset_details.js +++ b/app/assets/javascripts/spree/backend/spree_digital_assets/asset_details.js @@ -24,13 +24,15 @@ AssetDetails.prototype.setAttributes = function($assetDetailsArea, $img) { $assetDetailsArea.find('#created-date').html($img.data('created-on')); $assetDetailsArea.find('#modified-date').html($img.data('modified-on')); $assetDetailsArea.find('#related-products').html(this.setRelatedProducts($assetDetailsArea, $img.data('related-products'))); + $assetDetailsArea.find('#image-url').html($img.data('image-url')); + }; AssetDetails.prototype.setRelatedProducts = function($assetDetailsArea, data) { var $relatedProducts = $assetDetailsArea.find('#related-products').html(''); if(!data.length) { $relatedProducts.html('None'); - } + } $.each(data, function(index, product) { $relatedProducts.append($('').attr('href', '/admin/products/' + product.slug + '/edit') .text(product.name).css('display', 'block')); diff --git a/app/assets/stylesheets/spree/frontend/spree_digital_assets.css b/app/assets/stylesheets/spree/frontend/spree_digital_assets.css index da23623..10b6bf9 100644 --- a/app/assets/stylesheets/spree/frontend/spree_digital_assets.css +++ b/app/assets/stylesheets/spree/frontend/spree_digital_assets.css @@ -2,3 +2,14 @@ Placeholder manifest file. the installer will append this file to the app vendored assets here: 'vendor/assets/stylesheets/spree/frontend/all.css' */ +.banner-list-flex { + display: flex; + display: -webkit-flex; + justify-content: space-around; + -webkit-justify-content: space-around; + align-items: center; + -webkit-align-items: center; +} +.banner-list-flex-item { + display: block; +} diff --git a/app/controllers/spree/admin/banners_controller.rb b/app/controllers/spree/admin/banners_controller.rb new file mode 100644 index 0000000..620168c --- /dev/null +++ b/app/controllers/spree/admin/banners_controller.rb @@ -0,0 +1,55 @@ +module Spree + module Admin + + class BannersController < ResourceController + + before_action :load_banner, only: [:edit, :update, :destroy, :toggle_banner_active_status] + + def create + @banner = Banner.new(permitted_params) + if @banner.save + flash[:success] = Spree.t(:successfully_created_banner) + redirect_to admin_banners_path + else + render :new + end + end + + def index + params[:q] ||= {} + @search = Spree::Banner.order(created_at: :desc).ransack(params[:q]) + @banners = @search.result(distinct: true).page(params[:page]).per(params[:per_page]) + end + + def toggle_banner_active_status + if @banner.toggle!(:active) + flash[:success] = Spree.t(:successfully_updated_banner) + else + flash[:danger] = Spree.t(:error) + end + redirect_to admin_banners_path + end + + def update + if @banner.update(permitted_params) + flash[:success] = Spree.t(:successfully_updated_banner) + redirect_to admin_banners_path + else + render :edit + end + end + + private + + def permitted_params + params.require(:banner).permit(:title, :attachment, :link, :active) + end + + def load_banner + @banner = Spree::Banner.find_by(id: params[:id]) + end + + end + end + +end diff --git a/app/helpers/spree/admin/base_helper_decorator.rb b/app/helpers/spree/admin/base_helper_decorator.rb index 299d101..9abc420 100644 --- a/app/helpers/spree/admin/base_helper_decorator.rb +++ b/app/helpers/spree/admin/base_helper_decorator.rb @@ -51,13 +51,14 @@ def delete_folder_link(folder, options) end def asset_details(digital_asset) - { + { id: digital_asset.id, name: digital_asset.name, - size: number_to_human_size(digital_asset.attachment_file_size), - created_on: digital_asset.created_at.to_date.to_formatted_s(:long), - modified_on: digital_asset.updated_at.to_date.to_formatted_s(:long), - related_products: related_products(digital_asset) + size: number_to_human_size(digital_asset.attachment_file_size), + created_on: digital_asset.created_at.to_date.to_formatted_s(:long), + modified_on: digital_asset.updated_at.to_date.to_formatted_s(:long), + related_products: related_products(digital_asset), + image_url: request.host_with_port + digital_asset.attachment.url } end @@ -70,4 +71,13 @@ def related_products(digital_asset) products.values end + def banner_active(banner) + if banner.active + "btn-success" + else + "btn-danger" + end + end + + end diff --git a/app/models/spree/backend_configuration_decorator.rb b/app/models/spree/backend_configuration_decorator.rb new file mode 100644 index 0000000..54c6b46 --- /dev/null +++ b/app/models/spree/backend_configuration_decorator.rb @@ -0,0 +1 @@ +Spree::BackendConfiguration::BANNER ||= [:banner] diff --git a/app/models/spree/banner.rb b/app/models/spree/banner.rb new file mode 100644 index 0000000..d8af7cd --- /dev/null +++ b/app/models/spree/banner.rb @@ -0,0 +1,17 @@ +module Spree + class Banner < Spree::Base + has_attached_file :attachment, styles: { mini: '48x48>', small: '100x100>', product: '240x240>', large: '600x600>' }, + url: '/spree/banner/:id/:style/:basename.:extension', + path: ':rails_root/public/spree/banner/:id/:style/:basename.:extension' + + validates_attachment :attachment, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png", "image/gif"] } + + with_options presence: true do + validates :title, uniqueness: true + validates :link + validates :attachment + end + + scope :active, -> { where(active: true) } + end +end diff --git a/app/overrides/add_banner_div_to_layout.rb b/app/overrides/add_banner_div_to_layout.rb new file mode 100644 index 0000000..6f3b096 --- /dev/null +++ b/app/overrides/add_banner_div_to_layout.rb @@ -0,0 +1,6 @@ +Deface::Override.new( + virtual_path: 'spree/shared/_header', + name: 'add_banner_div_to_layout', + insert_top: "div#spree-header > div.container", + partial: 'spree/layouts/banner_div' +) diff --git a/app/overrides/add_banner_tab.rb b/app/overrides/add_banner_tab.rb new file mode 100644 index 0000000..df76124 --- /dev/null +++ b/app/overrides/add_banner_tab.rb @@ -0,0 +1,7 @@ +Deface::Override.new( + virtual_path: 'spree/layouts/admin', + name: 'add_banner_tab', + insert_bottom: "[data-hook='admin_configurations_sidebar_menu']", + text: "<%= configurations_sidebar_menu_item Spree.t(:banner), admin_banners_path %>" + +) diff --git a/app/views/spree/admin/banners/_form.html.erb b/app/views/spree/admin/banners/_form.html.erb new file mode 100644 index 0000000..74e19dd --- /dev/null +++ b/app/views/spree/admin/banners/_form.html.erb @@ -0,0 +1,32 @@ +
+
+ <%= f.field_container :title do %> + <%= f.label :title %> *
+ <%= f.text_field :title, class: 'form-control' %> + <%= f.error_message_on :title %> + <% end %> +
+
+ <%= f.field_container :link do %> + <%= f.label :link %> *
+ <%= f.text_field :link, class: 'form-control' %> + <%= f.error_message_on :link %> + <% end %> +
+ +
+ <%= f.field_container :attachment do %> + <%= f.label :attachment %>*
+ <%= f.file_field :attachment, class: 'form-control select-file btn btn-default' %> + <%= f.error_message_on :attachment %> + <% end %> +
+ +
+ <%= f.field_container :active do %> + <%= f.label :active %> + <%= f.check_box :active %> + <% end %> +
+ +
diff --git a/app/views/spree/admin/banners/edit.html.erb b/app/views/spree/admin/banners/edit.html.erb new file mode 100644 index 0000000..6f188dd --- /dev/null +++ b/app/views/spree/admin/banners/edit.html.erb @@ -0,0 +1,14 @@ +<% content_for :page_title do %> + <%= Spree.t(:editing_banner) %> +<% end %> + +<% content_for :page_actions do %> + <%= button_link_to Spree.t(:back_to_banner_list), spree.admin_banners_path, icon: 'arrow-left', class: 'btn btn-primary' %> +<% end %> + +<%= form_for [:admin, @banner] do |f| %> +
+ <%= render partial: 'form', locals: { f: f } %> + <%= render partial: 'spree/admin/shared/edit_resource_links' %> +
+<% end %> diff --git a/app/views/spree/admin/banners/index.html.erb b/app/views/spree/admin/banners/index.html.erb new file mode 100644 index 0000000..005ba78 --- /dev/null +++ b/app/views/spree/admin/banners/index.html.erb @@ -0,0 +1,38 @@ +<% content_for :page_title do %> + <%= Spree.t(:banners) %> +<% end %> + +<% content_for :page_actions do %> + <%= button_link_to Spree.t(:new_banner), spree.new_admin_banner_path, icon: 'arrow-left', class: 'btn btn-primary' %> +<% end %> + + + + + + + + + + + + + <% @banners.each do |banner| %> + + + + + + + + <% end %> + +
<%= Spree.t(:Title) %><%= Spree.t(:Link) %><%= Spree.t(:image) %><%= Spree.t(:active) %>
+ +<%= paginate @banners %> diff --git a/app/views/spree/admin/banners/new.html.erb b/app/views/spree/admin/banners/new.html.erb new file mode 100644 index 0000000..2e32d1c --- /dev/null +++ b/app/views/spree/admin/banners/new.html.erb @@ -0,0 +1,14 @@ +<% content_for :page_title do %> + <%= Spree.t(:new_banner) %> +<% end %> + +<% content_for :page_actions do %> + <%= button_link_to Spree.t(:back_to_banner_list), spree.admin_banners_path, icon: 'arrow-left', class: 'btn btn-primary' %> +<% end %> + +<%= form_for [:admin, @banner] do |f| %> +
+ <%= render partial: 'form', locals: { f: f } %> + <%= render partial: 'spree/admin/shared/new_resource_links', locals: { collection_url: admin_banners_path } %> +
+<% end %> diff --git a/app/views/spree/admin/digital_assets/_content.html.erb b/app/views/spree/admin/digital_assets/_content.html.erb index 23dfbe7..4283b3e 100644 --- a/app/views/spree/admin/digital_assets/_content.html.erb +++ b/app/views/spree/admin/digital_assets/_content.html.erb @@ -21,12 +21,13 @@
-
-
+
+

File Size:

Added On:

Modified On:

-

Related Products:

+

Related Products:

+

Image Url:

diff --git a/app/views/spree/layouts/_banner_div.html.erb b/app/views/spree/layouts/_banner_div.html.erb new file mode 100644 index 0000000..9102ac3 --- /dev/null +++ b/app/views/spree/layouts/_banner_div.html.erb @@ -0,0 +1,10 @@ +<% banners = Spree::Banner.active %> +<% if banners.present? %> +
+<% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index e7ad422..b3503d1 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -9,3 +9,10 @@ en: success: 'Folder has been deleted successfully' failure: '%{error_messages}' upload_asset: Upload Asset + banner: Frontend Banner + new_banner: New Banner + back_to_banner_list: Back To Banner List + successfully_created_banner: Banner is successfully created + banners: Banners + successfully_updated_banner: Successfully Updated Banner + error: Banner couldn't be updated. Please try again diff --git a/config/routes.rb b/config/routes.rb index d6ce782..8920232 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -3,6 +3,9 @@ namespace :admin do resources :digital_assets resources :folders, only: [:create, :update, :destroy] + resources :banners, except: [:show] do + patch :toggle_banner_active_status, on: :member + end end end diff --git a/db/migrate/20180711131600_create_spree_banner.rb b/db/migrate/20180711131600_create_spree_banner.rb new file mode 100644 index 0000000..cac11e8 --- /dev/null +++ b/db/migrate/20180711131600_create_spree_banner.rb @@ -0,0 +1,11 @@ +class CreateSpreeBanner < ActiveRecord::Migration[5.1] + def change + create_table :spree_banners do |t| + t.string :title + t.boolean :active, default: false + t.string :link + t.attachment :attachment + t.timestamps + end + end +end From 8b7898acd7939c2cd7c9175dc4e1426b5d9aa1be Mon Sep 17 00:00:00 2001 From: Himanshu Date: Tue, 31 Jul 2018 15:40:36 +0530 Subject: [PATCH 02/10] mobile banner added --- README.md | 6 ++++++ app/controllers/spree/admin/banners_controller.rb | 2 +- .../spree/application_controller_decorator.rb | 10 ++++++++++ app/models/spree/banner.rb | 9 +++++++++ app/overrides/add_banner_div_to_layout.rb | 2 +- app/overrides/add_banner_tab.rb | 2 +- app/views/spree/admin/banners/_form.html.erb | 8 ++++++++ app/views/spree/layouts/_banner_div.html.erb | 2 +- config/locales/en.yml | 1 + ...0180731080848_add_mobile_banner_to_spree_banners.rb | 5 +++++ 10 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 app/controllers/spree/application_controller_decorator.rb create mode 100644 db/migrate/20180731080848_add_mobile_banner_to_spree_banners.rb diff --git a/README.md b/README.md index a11b154..93f0f09 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,12 @@ For more features or usage manual go [here](http://vinsol.com/spreecommerce-digi gem 'spree_digital_assets', github: 'vinsol-spree-contrib/spree_digital_assets', branch: 'X-X-stable' ``` + Also Add To your gemfile + + ```ruby + gem 'browser', '2.0.3' + ``` + The `branch` option is important: it must match the version of Spree you're using. For example, use `3-0-stable` if you're using Spree `3-0-stable` or any `3.0.x` version. diff --git a/app/controllers/spree/admin/banners_controller.rb b/app/controllers/spree/admin/banners_controller.rb index 620168c..705303d 100644 --- a/app/controllers/spree/admin/banners_controller.rb +++ b/app/controllers/spree/admin/banners_controller.rb @@ -42,7 +42,7 @@ def update private def permitted_params - params.require(:banner).permit(:title, :attachment, :link, :active) + params.require(:banner).permit(:title, :attachment, :link, :active, :mobile_banner) end def load_banner diff --git a/app/controllers/spree/application_controller_decorator.rb b/app/controllers/spree/application_controller_decorator.rb new file mode 100644 index 0000000..6299462 --- /dev/null +++ b/app/controllers/spree/application_controller_decorator.rb @@ -0,0 +1,10 @@ +ApplicationController.class_eval do + + before_action :detect_device_variant + + private + + def detect_device_variant + request.variant = :phone if browser.device.mobile? + end +end diff --git a/app/models/spree/banner.rb b/app/models/spree/banner.rb index d8af7cd..3161b05 100644 --- a/app/models/spree/banner.rb +++ b/app/models/spree/banner.rb @@ -5,6 +5,7 @@ class Banner < Spree::Base path: ':rails_root/public/spree/banner/:id/:style/:basename.:extension' validates_attachment :attachment, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png", "image/gif"] } + validate :only_one_mobile_banner, if: :mobile_banner? with_options presence: true do validates :title, uniqueness: true @@ -13,5 +14,13 @@ class Banner < Spree::Base end scope :active, -> { where(active: true) } + scope :mobile_banner, -> { where(mobile_banner: true) } + + def only_one_mobile_banner + if Banner.mobile_banner.present? + errors.add(:mobile_banner, Spree.t(:only_one_mobile_banner)) + end + end + end end diff --git a/app/overrides/add_banner_div_to_layout.rb b/app/overrides/add_banner_div_to_layout.rb index 6f3b096..9be74e8 100644 --- a/app/overrides/add_banner_div_to_layout.rb +++ b/app/overrides/add_banner_div_to_layout.rb @@ -1,6 +1,6 @@ Deface::Override.new( virtual_path: 'spree/shared/_header', name: 'add_banner_div_to_layout', - insert_top: "div#spree-header > div.container", + insert_after: "div#spree-header > div.container", partial: 'spree/layouts/banner_div' ) diff --git a/app/overrides/add_banner_tab.rb b/app/overrides/add_banner_tab.rb index df76124..4580c55 100644 --- a/app/overrides/add_banner_tab.rb +++ b/app/overrides/add_banner_tab.rb @@ -1,5 +1,5 @@ Deface::Override.new( - virtual_path: 'spree/layouts/admin', + virtual_path: 'spree/admin/shared/sub_menu/_configuration', name: 'add_banner_tab', insert_bottom: "[data-hook='admin_configurations_sidebar_menu']", text: "<%= configurations_sidebar_menu_item Spree.t(:banner), admin_banners_path %>" diff --git a/app/views/spree/admin/banners/_form.html.erb b/app/views/spree/admin/banners/_form.html.erb index 74e19dd..ed07ede 100644 --- a/app/views/spree/admin/banners/_form.html.erb +++ b/app/views/spree/admin/banners/_form.html.erb @@ -29,4 +29,12 @@ <% end %>
+
+ <%= f.field_container :mobile_banner do %> + <%= f.label :mobile_banner %> + <%= f.check_box :mobile_banner %> + <%= f.error_message_on :mobile_banner %> + <% end %> +
+
diff --git a/app/views/spree/layouts/_banner_div.html.erb b/app/views/spree/layouts/_banner_div.html.erb index 9102ac3..91896a5 100644 --- a/app/views/spree/layouts/_banner_div.html.erb +++ b/app/views/spree/layouts/_banner_div.html.erb @@ -1,4 +1,4 @@ -<% banners = Spree::Banner.active %> +<% banners = (request.variant.include?(:phone)) ? Spree::Banner.mobile_banner : Spree::Banner.active %> <% if banners.present? %>
<%= f.field_container :link do %> <%= f.label :link %> *
<%= f.text_field :link, class: 'form-control' %> - <%= f.error_message_on :link %> <% end %>
@@ -18,7 +16,7 @@ <%= f.field_container :attachment do %> <%= f.label :attachment %>*
<%= f.file_field :attachment, class: 'form-control select-file btn btn-default' %> - <%= f.error_message_on :attachment %> +

Upload pic with approximate 1022 × 60 dimensions

<% end %> @@ -33,7 +31,6 @@ <%= f.field_container :mobile_banner do %> <%= f.label :mobile_banner %> <%= f.check_box :mobile_banner %> - <%= f.error_message_on :mobile_banner %> <% end %> diff --git a/app/views/spree/admin/banners/edit.html.erb b/app/views/spree/admin/banners/edit.html.erb index 6f188dd..02425a6 100644 --- a/app/views/spree/admin/banners/edit.html.erb +++ b/app/views/spree/admin/banners/edit.html.erb @@ -6,6 +6,8 @@ <%= button_link_to Spree.t(:back_to_banner_list), spree.admin_banners_path, icon: 'arrow-left', class: 'btn btn-primary' %> <% end %> +<%= render partial: 'spree/shared/error_messages', locals: { target: @banner } %> + <%= form_for [:admin, @banner] do |f| %>
<%= render partial: 'form', locals: { f: f } %> diff --git a/app/views/spree/admin/banners/index.html.erb b/app/views/spree/admin/banners/index.html.erb index 005ba78..138bf19 100644 --- a/app/views/spree/admin/banners/index.html.erb +++ b/app/views/spree/admin/banners/index.html.erb @@ -6,6 +6,7 @@ <%= button_link_to Spree.t(:new_banner), spree.new_admin_banner_path, icon: 'arrow-left', class: 'btn btn-primary' %> <% end %> + @@ -13,22 +14,28 @@ + <% @banners.each do |banner| %> - + - + + <% end %> diff --git a/app/views/spree/admin/banners/new.html.erb b/app/views/spree/admin/banners/new.html.erb index 2e32d1c..2e7e7c6 100644 --- a/app/views/spree/admin/banners/new.html.erb +++ b/app/views/spree/admin/banners/new.html.erb @@ -6,6 +6,8 @@ <%= button_link_to Spree.t(:back_to_banner_list), spree.admin_banners_path, icon: 'arrow-left', class: 'btn btn-primary' %> <% end %> +<%= render partial: 'spree/shared/error_messages', locals: { target: @banner } %> + <%= form_for [:admin, @banner] do |f| %>
<%= render partial: 'form', locals: { f: f } %> diff --git a/app/views/spree/layouts/_banner_div.html.erb b/app/views/spree/layouts/_banner_div.html.erb index 91896a5..0a3f906 100644 --- a/app/views/spree/layouts/_banner_div.html.erb +++ b/app/views/spree/layouts/_banner_div.html.erb @@ -1,4 +1,4 @@ -<% banners = (request.variant.include?(:phone)) ? Spree::Banner.mobile_banner : Spree::Banner.active %> +<% banners = (request.variant.include?(:phone)) ? Spree::Banner.mobile_active_banner : Spree::Banner.active %> <% if banners.present? %> -
+
<%= f.field_container :attachment do %> <%= f.label :attachment %>*
+ <%= f.fields_for :images, @banner.images.build do |form| %> + <%= render partial: "spree/admin/images/upload_digital_asset", locals: { f: form } %> + <% end %> <%= f.file_field :attachment, class: 'form-control select-file btn btn-default' %>

Upload pic with approximate 1022 × 60 dimensions

<% end %> diff --git a/app/views/spree/admin/banners/index.html.erb b/app/views/spree/admin/banners/index.html.erb index 138bf19..3d15af0 100644 --- a/app/views/spree/admin/banners/index.html.erb +++ b/app/views/spree/admin/banners/index.html.erb @@ -6,40 +6,50 @@ <%= button_link_to Spree.t(:new_banner), spree.new_admin_banner_path, icon: 'arrow-left', class: 'btn btn-primary' %> <% end %> - -
<%= Spree.t(:Link) %> <%= Spree.t(:image) %> <%= Spree.t(:active) %><%= Spree.t(:mobile_banner) %>
- - - - - - - - - - - - <% @banners.each do |banner| %> - - - - - - - + + + + <% end %> + +
<%= Spree.t(:Title) %><%= Spree.t(:Link) %><%= Spree.t(:image) %><%= Spree.t(:active) %><%= Spree.t(:mobile_banner) %>
+<% else %> +
+ <%= Spree.t(:no_resource_found, resource: plural_resource_name(Spree::Banner)) %>, + <%= link_to Spree.t(:add_one), new_object_url if can?(:create, Spree::Banner) %>! +
+<% end %> <%= paginate @banners %> diff --git a/app/views/spree/layouts/_banner_div.html.erb b/app/views/spree/layouts/_banner_div.html.erb index 0a3f906..4f9e9a7 100644 --- a/app/views/spree/layouts/_banner_div.html.erb +++ b/app/views/spree/layouts/_banner_div.html.erb @@ -3,7 +3,11 @@ diff --git a/config/routes.rb b/config/routes.rb index 8920232..ef4c02b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -5,6 +5,7 @@ resources :folders, only: [:create, :update, :destroy] resources :banners, except: [:show] do patch :toggle_banner_active_status, on: :member + resources :images end end From e89e6057d9ae6729c16c8079b1403fb578176963 Mon Sep 17 00:00:00 2001 From: Himanshu Date: Tue, 28 Aug 2018 16:06:12 +0530 Subject: [PATCH 06/10] fix --- app/models/spree/banner.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/models/spree/banner.rb b/app/models/spree/banner.rb index 95196ae..59630ee 100644 --- a/app/models/spree/banner.rb +++ b/app/models/spree/banner.rb @@ -15,7 +15,7 @@ class Banner < Spree::Base with_options presence: true do validates :title, uniqueness: true validates :link - validates :attachment, unless: :images + validates :attachment, unless: :images_present? validates :images, unless: :attachment end @@ -37,6 +37,10 @@ def change_active_status private + def images_present? + images.present? + end + def only_one_mobile_banner if mobile_banner? if !active? From 846e436de54aa319ce647d4ce6609f698c68dd79 Mon Sep 17 00:00:00 2001 From: Himanshu Date: Tue, 28 Aug 2018 18:57:50 +0530 Subject: [PATCH 07/10] fix --- app/models/spree/banner.rb | 8 +++++++- app/views/spree/admin/banners/_form.html.erb | 1 + app/views/spree/layouts/_banner_div.html.erb | 2 +- config/locales/en.yml | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/models/spree/banner.rb b/app/models/spree/banner.rb index 59630ee..53e12d4 100644 --- a/app/models/spree/banner.rb +++ b/app/models/spree/banner.rb @@ -16,11 +16,13 @@ class Banner < Spree::Base validates :title, uniqueness: true validates :link validates :attachment, unless: :images_present? - validates :images, unless: :attachment + validates :images, unless: :attachment? end validates_format_of :link, with: URL_VALIDATION_REGEX, multiline: true, allow_blank: true + validate :both_image_and_attachment_not_present + scope :active, -> { where(active: true) } scope :mobile_active_banner, -> { where(mobile_banner: true, active: true) } @@ -62,5 +64,9 @@ def restrict_if_active end end + def both_image_and_attachment_not_present + errors.add(:base, Spree.t(:both_asset_and_attachment)) if images.present? && attachment? + end + end end diff --git a/app/views/spree/admin/banners/_form.html.erb b/app/views/spree/admin/banners/_form.html.erb index e476c51..7ee8cab 100644 --- a/app/views/spree/admin/banners/_form.html.erb +++ b/app/views/spree/admin/banners/_form.html.erb @@ -18,6 +18,7 @@ <%= f.fields_for :images, @banner.images.build do |form| %> <%= render partial: "spree/admin/images/upload_digital_asset", locals: { f: form } %> <% end %> + <%= Spree.t(:or) %> <%= f.file_field :attachment, class: 'form-control select-file btn btn-default' %>

Upload pic with approximate 1022 × 60 dimensions

<% end %> diff --git a/app/views/spree/layouts/_banner_div.html.erb b/app/views/spree/layouts/_banner_div.html.erb index 4f9e9a7..c30da58 100644 --- a/app/views/spree/layouts/_banner_div.html.erb +++ b/app/views/spree/layouts/_banner_div.html.erb @@ -6,7 +6,7 @@ <% if banner.attachment.present? %> <%= image_tag banner.attachment, class: 'img-responsive' %> <% else %> - <%= image_tag banner.images.first.attachment, class: 'img-responsive' %> + <%= image_tag banner.images.first.attachment(:large), class: 'img-responsive' %> <% end %> <% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 33efdca..d157ef9 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -20,3 +20,4 @@ en: successfully_deleted_banner: Banner deleted Successfully cannot_delete_active_banner: Cannot delete Active Banner. Disable first to delete. only_active_mobile_banner: banner can be mobile banner. + both_asset_and_attachment: Cannot add both attachment and asset. Choose one of the following. From 0cc497900b7b24b59d5ecd3e45599fe4af1f2c04 Mon Sep 17 00:00:00 2001 From: Himanshu Date: Wed, 29 Aug 2018 14:00:18 +0530 Subject: [PATCH 08/10] qa fix --- app/models/spree/banner.rb | 2 +- app/models/spree/image_decorator.rb | 8 ++++++++ app/views/spree/admin/banners/_form.html.erb | 2 +- app/views/spree/admin/banners/edit.html.erb | 2 ++ .../spree/admin/images/_upload_digital_asset.html.erb | 2 +- app/views/spree/layouts/_banner_div.html.erb | 2 +- config/locales/en.yml | 2 +- 7 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 app/models/spree/image_decorator.rb diff --git a/app/models/spree/banner.rb b/app/models/spree/banner.rb index 53e12d4..590ad2b 100644 --- a/app/models/spree/banner.rb +++ b/app/models/spree/banner.rb @@ -46,7 +46,7 @@ def images_present? def only_one_mobile_banner if mobile_banner? if !active? - errors.add(:active, Spree.t(:only_active_mobile_banner)) + errors.add(:base, Spree.t(:only_active_mobile_banner)) elsif other_mobile_banner_active? errors.add(:base, Spree.t(:only_one_mobile_banner)) end diff --git a/app/models/spree/image_decorator.rb b/app/models/spree/image_decorator.rb new file mode 100644 index 0000000..c76d79e --- /dev/null +++ b/app/models/spree/image_decorator.rb @@ -0,0 +1,8 @@ +Spree::Image.class_eval do + has_attached_file :attachment, + styles: { mini: '48x48>', small: '100x100>', product: '240x240>', large: '600x600>', banner: '1022x60>' }, + default_style: :product, + url: '/spree/products/:id/:style/:basename.:extension', + path: ':rails_root/public/spree/products/:id/:style/:basename.:extension', + convert_options: { all: '-strip -auto-orient -colorspace sRGB' } +end diff --git a/app/views/spree/admin/banners/_form.html.erb b/app/views/spree/admin/banners/_form.html.erb index 7ee8cab..e02867f 100644 --- a/app/views/spree/admin/banners/_form.html.erb +++ b/app/views/spree/admin/banners/_form.html.erb @@ -19,7 +19,7 @@ <%= render partial: "spree/admin/images/upload_digital_asset", locals: { f: form } %> <% end %> <%= Spree.t(:or) %> - <%= f.file_field :attachment, class: 'form-control select-file btn btn-default' %> + <%= f.file_field :attachment, class: 'form-control select-file btn btn-default', disabled: @attachment_absent %>

Upload pic with approximate 1022 × 60 dimensions

<% end %> diff --git a/app/views/spree/admin/banners/edit.html.erb b/app/views/spree/admin/banners/edit.html.erb index 02425a6..428079c 100644 --- a/app/views/spree/admin/banners/edit.html.erb +++ b/app/views/spree/admin/banners/edit.html.erb @@ -10,6 +10,8 @@ <%= form_for [:admin, @banner] do |f| %>
+ <% @asset_absent = @banner.images.empty? %> + <% @attachment_absent = !@banner.attachment? %> <%= render partial: 'form', locals: { f: f } %> <%= render partial: 'spree/admin/shared/edit_resource_links' %>
diff --git a/app/views/spree/admin/images/_upload_digital_asset.html.erb b/app/views/spree/admin/images/_upload_digital_asset.html.erb index 73ffb6d..68006b9 100644 --- a/app/views/spree/admin/images/_upload_digital_asset.html.erb +++ b/app/views/spree/admin/images/_upload_digital_asset.html.erb @@ -1,6 +1,6 @@
- + diff --git a/app/views/spree/layouts/_banner_div.html.erb b/app/views/spree/layouts/_banner_div.html.erb index c30da58..2d45499 100644 --- a/app/views/spree/layouts/_banner_div.html.erb +++ b/app/views/spree/layouts/_banner_div.html.erb @@ -6,7 +6,7 @@ <% if banner.attachment.present? %> <%= image_tag banner.attachment, class: 'img-responsive' %> <% else %> - <%= image_tag banner.images.first.attachment(:large), class: 'img-responsive' %> + <%= image_tag banner.images.first.attachment(:banner), class: 'img-responsive' %> <% end %> <% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index d157ef9..488772a 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -19,5 +19,5 @@ en: only_one_mobile_banner: Only one mobile banner is allowed. Disable other to enable this successfully_deleted_banner: Banner deleted Successfully cannot_delete_active_banner: Cannot delete Active Banner. Disable first to delete. - only_active_mobile_banner: banner can be mobile banner. + only_active_mobile_banner: Inactive Banner cannot be mobile banner. both_asset_and_attachment: Cannot add both attachment and asset. Choose one of the following. From 55e60dfbbf935d8ec1012c8a9e345fb6498f5eb1 Mon Sep 17 00:00:00 2001 From: Himanshu Date: Thu, 20 Sep 2018 16:29:40 +0530 Subject: [PATCH 09/10] changes --- README.md | 1 + .../spree/backend/spree_digital_assets.js | 10 +++++++ .../spree/backend/spree_digital_assets.css | 29 +++++++++++++++++++ app/views/spree/admin/banners/_form.html.erb | 5 ++-- app/views/spree/admin/banners/index.html.erb | 5 ++-- .../images/_upload_digital_asset.html.erb | 4 +-- spree_digital_assets.gemspec | 1 + 7 files changed, 49 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 9f38ef2..cd6a67f 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ Try Spree Digital Assets for Spree 3-1 with direct deployment on Heroku: [![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/vinsol-spree-contrib/spree-demo-heroku/tree/spree-digital-assets-3-1) +**Note** Add gem 'bootstrap-toggle-rails' to gemfile. ## Features diff --git a/app/assets/javascripts/spree/backend/spree_digital_assets.js b/app/assets/javascripts/spree/backend/spree_digital_assets.js index 64e6b6a..d383102 100644 --- a/app/assets/javascripts/spree/backend/spree_digital_assets.js +++ b/app/assets/javascripts/spree/backend/spree_digital_assets.js @@ -11,3 +11,13 @@ //= require spree/backend/spree_digital_assets/upload-assets //= require spree/backend/spree_digital_assets/folder //= require spree/backend/spree_digital_assets/asset_details + +/*! ======================================================================== + * Bootstrap Toggle: bootstrap-toggle.js v2.2.0 + * http://www.bootstraptoggle.com + * ======================================================================== + * Copyright 2014 Min Hur, The New York Times Company + * Licensed under MIT + * ======================================================================== */ ++function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.toggle"),f="object"==typeof b&&b;e||d.data("bs.toggle",e=new c(this,f)),"string"==typeof b&&e[b]&&e[b]()})}var c=function(b,c){this.$element=a(b),this.options=a.extend({},this.defaults(),c),this.render()};c.VERSION="2.2.0",c.DEFAULTS={on:"On",off:"Off",onstyle:"primary",offstyle:"default",size:"normal",style:"",width:null,height:null},c.prototype.defaults=function(){return{on:this.$element.attr("data-on")||c.DEFAULTS.on,off:this.$element.attr("data-off")||c.DEFAULTS.off,onstyle:this.$element.attr("data-onstyle")||c.DEFAULTS.onstyle,offstyle:this.$element.attr("data-offstyle")||c.DEFAULTS.offstyle,size:this.$element.attr("data-size")||c.DEFAULTS.size,style:this.$element.attr("data-style")||c.DEFAULTS.style,width:this.$element.attr("data-width")||c.DEFAULTS.width,height:this.$element.attr("data-height")||c.DEFAULTS.height}},c.prototype.render=function(){this._onstyle="btn-"+this.options.onstyle,this._offstyle="btn-"+this.options.offstyle;var b="large"===this.options.size?"btn-lg":"small"===this.options.size?"btn-sm":"mini"===this.options.size?"btn-xs":"",c=a('