From a3f14ed9a09d7e8f5a5cb3bbda76fa3b03f677ba Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Wed, 17 Feb 2016 20:37:37 +0800 Subject: [PATCH] new interface with order --- .../javascripts/ad_banner/banner_preview.js | 8 +- app/controllers/ad_banners_controller.rb | 6 +- .../admin/ad_banners_controller.rb | 68 +++++--- app/controllers/admin/ad_images_controller.rb | 40 ++--- app/models/ad_image.rb | 25 +++ app/models/banner.rb | 12 +- app/views/admin/ad_banners/_form.html.erb | 108 ++++++++++-- app/views/admin/ad_banners/_index.html.erb | 53 +++--- .../admin/ad_banners/_index_table.html.erb | 70 ++++++++ app/views/admin/ad_banners/edit.html.erb | 5 + app/views/admin/ad_banners/index.html.erb | 50 +----- app/views/admin/ad_banners/new.html.erb | 5 + app/views/admin/ad_banners/show.html.erb | 155 ++++++++++++++++++ app/views/admin/ad_images/_form.html.erb | 14 +- config/routes.rb | 1 + 15 files changed, 465 insertions(+), 155 deletions(-) create mode 100644 app/views/admin/ad_banners/_index_table.html.erb create mode 100644 app/views/admin/ad_banners/edit.html.erb create mode 100644 app/views/admin/ad_banners/new.html.erb create mode 100644 app/views/admin/ad_banners/show.html.erb diff --git a/app/assets/javascripts/ad_banner/banner_preview.js b/app/assets/javascripts/ad_banner/banner_preview.js index 7f59d8e..69075aa 100644 --- a/app/assets/javascripts/ad_banner/banner_preview.js +++ b/app/assets/javascripts/ad_banner/banner_preview.js @@ -8,9 +8,6 @@ function slideshow (element, bannerEffect, bannerTime, bannerSpeed) { }); }; function setSlideshow(element, data) { - $("#pageslide .ad_banner_ad_fx").children('option:selected').each(function(index, el) { - $(this).val() == 'flipHorz' || $(this).val() == 'flipVert' ? $('.suckIE').show() : $('.suckIE').hide(); - }); slideshow(element, data['fx'], 2000, 1000); } @@ -63,7 +60,7 @@ $(function() { bannerSpeed = null, bannerW = null, bannerH = null, - $preview = $('#pageslide .preview'); + $preview = $('.main-forms .preview'); $(".ad_banner_ad_fx").change(function () { var suckIE = false; @@ -72,9 +69,6 @@ $(function() { bannerTime = parseInt(bannerTime) || 300; bannerSpeed = parseInt(bannerSpeed) || 300; - $(this).children('option:selected').each(function(index, el) { - $(this).val() == 'flipHorz' || $(this).val() == 'flipVert' ? $('.suckIE').show() : $('.suckIE').hide(); - }); slideshow($preview, $(this).val(), 2000, 1000); }); preview(); diff --git a/app/controllers/ad_banners_controller.rb b/app/controllers/ad_banners_controller.rb index 7d05785..fc71d56 100644 --- a/app/controllers/ad_banners_controller.rb +++ b/app/controllers/ad_banners_controller.rb @@ -1,6 +1,6 @@ class AdBannersController < ApplicationController def widget - adbanner = Banner.find(OrbitHelper.widget_custom_value) + adbanner = Banner.find(OrbitHelper.widget_custom_value) widget = OrbitHelper.get_current_widget if widget.widget_type == "ad_banner_widget2_video" return video_widget(adbanner) @@ -13,7 +13,7 @@ class AdBannersController < ApplicationController def image_widget(adbanner) images = [] - adbanner.ad_images.can_display.desc(:created_at).each_with_index do |b,i| + adbanner.ad_images.can_display.asc(:sort_number).each_with_index do |b,i| if b.language_enabled.include?(I18n.locale.to_s) image_link = OrbitHelper.is_mobile_view ? b.file.mobile.url : b.file.url klass = i == 0 ? "active" : "" @@ -52,7 +52,7 @@ class AdBannersController < ApplicationController def video_widget(adbanner) images = [] - adbanner.ad_images.can_display.each_with_index do |ad_b,i| + adbanner.ad_images.can_display.asc(:sort_number).each_with_index do |ad_b,i| if ad_b.language_enabled.include?(I18n.locale.to_s) image_link = OrbitHelper.is_mobile_view ? ad_b.file.mobile.url : ad_b.file.url alt_text = (ad_b.title.nil? || ad_b.title == "" ? "ad-banner image" : ad_b.title) diff --git a/app/controllers/admin/ad_banners_controller.rb b/app/controllers/admin/ad_banners_controller.rb index 1cb8fae..38f6388 100644 --- a/app/controllers/admin/ad_banners_controller.rb +++ b/app/controllers/admin/ad_banners_controller.rb @@ -2,56 +2,78 @@ class Admin::AdBannersController < OrbitAdminController before_action ->(module_app = @app_title) { set_variables module_app } def index + @table_fields = ["ad_banner.banner", :title, :category] + @categories = @module_app.categories.enabled + @filter_fields = filter_fields(@categories, []) + @filter_fields.delete(:status) + @filter_fields.delete(:tags) @banners = Banner.all - @categories = @module_app.categories.enabled.collect{|c|[c.title, c.id]} + .order_by(sort) + .with_categories(filters("category")) + + @banners = search_data(@banners,[:title]).page(params[:page]).per(6) + if request.xhr? + render :partial => "index_table" + end end def show - @ad_banners = Banner.all - @active = Banner.find(params[:id]) - render :action => 'index' + @banner = Banner.find(params[:id]) + if params[:show] == "expired" + @images = @banner.ad_images.is_expired.asc(:sort_number).page(params[:page]).per(10) + else + @images = @banner.ad_images.not_expired.asc(:sort_number).page(params[:page]).per(10) + end + @table_fields = [:banner, :title, "ad_banner.duration", :link] end def new + user_has_rights = (current_user.is_admin? ? true : (current_user.is_manager?(@module_app) ? true : current_user.is_manager_with_role?(@module_app) ? true : false)) rescue false @ad_banner = Banner.new - render layout: false + render_401 if !user_has_rights end def create - @ad_banner = Banner.new(banner_params) - if @ad_banner.save - redirect_to admin_ad_banners_url - else - @ad_banner = Banner.new(params[:ad_banner]) - render :new - end + ad_banner = Banner.new(banner_params) + ad_banner.save + redirect_to admin_ad_banners_url end def edit + user_has_rights = (current_user.is_admin? ? true : (current_user.is_manager?(@module_app) ? true : current_user.is_manager_with_role?(@module_app) ? true : false)) rescue false @ad_banner = Banner.find(params[:id]) - render layout: false + render_401 if !user_has_rights end def update - @ad_banner = Banner.find(params[:id]) - if @ad_banner.update_attributes(banner_params) - redirect_to admin_ad_banners_url, :status => 303 - else - render :edit - end + ad_banner = Banner.find(params[:id]) + ad_banner.update_attributes(banner_params) + redirect_to params[:referer_url] end def destroy - @ad_banner = Banner.find(params[:id]) - @ad_banner.destroy - redirect_to admin_ad_banners_url + ad_banner = Banner.find(params[:id]) + ad_banner.destroy + redirect_to admin_ad_banners_path(:page => params[:page]) + end + + def save_image_order + ids = params[:ids] + ids.each_with_index do |id,index| + image = AdImage.find(id) rescue nil + if !image.nil? + image.sort_number = index + image.save + end + end + render :json => {"success" => true}.to_json end private # Never trust parameters from the scary internet, only allow the white list through. def banner_params - params.require(:ad_banner).permit! + params.require(:banner).permit! end end diff --git a/app/controllers/admin/ad_images_controller.rb b/app/controllers/admin/ad_images_controller.rb index 58687e7..b6ff4f0 100644 --- a/app/controllers/admin/ad_images_controller.rb +++ b/app/controllers/admin/ad_images_controller.rb @@ -21,42 +21,34 @@ class Admin::AdImagesController < Admin::AdBannersController end def update - @ad_image = AdImage.find(params[:id]) - if @ad_image.update_attributes(ad_image_params) - redirect_to params['referer_url'] - else - @ad_banners = Banner.all - @tags = @module_app.tags || [] - render action: :edit - end + ad_image = AdImage.find(params[:id]) + ad_image.update_attributes(ad_image_params) + redirect_to params[:referer_url] end def new @ad_image = AdImage.new + @ad_banner = Banner.find(params[:banner_id]) @item = [[t('image'),"1"],[t('video'),"2"]] - @ad_banner = Banner.find(params[:banner]) - @tags = @module_app.tags || [] - - @ad_image.postdate = Date.today + if can_edit_or_delete?(@ad_banner) + @tags = @module_app.tags || [] + @ad_image.postdate = Date.today + else + render_401 + end end def create @ad_image = AdImage.new(ad_image_params) - if @ad_image.save - redirect_to params['referer_url'] - else - @ad_banners = Banner.all - @tags = @module_app.tags || [] - @ad_image = AdImage.new(ad_image_params) - render action: :new - end + @ad_image.save + redirect_to params[:referer_url] end def destroy - @ad_image = AdImage.find params[:id] - if @ad_image.destroy - redirect_to admin_ad_banners_url - end + ad_image = AdImage.find params[:id] + banner = ad_image.banner + ad_image.destroy + redirect_to admin_ad_banner_path(banner.id, :page => params[:page]) end private diff --git a/app/models/ad_image.rb b/app/models/ad_image.rb index efc3c9f..da233b1 100644 --- a/app/models/ad_image.rb +++ b/app/models/ad_image.rb @@ -14,6 +14,7 @@ class AdImage field :postdate , :type => DateTime, :default => Time.now field :deadline , :type => DateTime field :youtube , :type => String + field :sort_number, :type => Integer field :language_enabled, :type => Array, :default => ["en","zh_tw"] field :exchange_item, :default => "1" LINK_OPEN_TYPES = ["local", "new_window"] @@ -26,11 +27,35 @@ class AdImage # validates :title, presence: true scope :can_display, ->{self.and(AdImage.or({:postdate.lte=>Time.now},{:postdate=>nil}).selector,AdImage.or({:deadline.gte=>Time.now},{:deadline=>nil}).selector)} + scope :is_expired, ->{self.and(AdImage.or({:deadline.lte=>Time.now}).selector)} + scope :not_expired, ->{self.and(AdImage.or({:deadline.gte=>Time.now},{:deadline=>nil}).selector)} def expired? self.deadline { :minimum => 2 } - validates :height, :width, :presence => true - - FX_TYPES = %w(fade fadeout flipHorz flipVert scrollHorz scrollVert tileSlide tileBlind) + + FX_TYPES = %w(fade scrollHorz scrollVert tileSlide tileBlind) def size "#{self.width} x #{self.height}" @@ -32,6 +32,6 @@ class Banner end def data_attribute_hash - {'width'=> self.width,'height'=> self.height,'ad_fx'=> self.ad_fx,'name'=>self.title,'timeout'=>self.timeout,'speed'=>self.speed}.to_json + {'width'=> self.width,'height'=> self.height,'ad_fx'=> self.ad_fx,'name'=>self.title,'timeout'=>self.timeout,'speed'=>self.speed, 'base_image' => self.base_image}.to_json end end diff --git a/app/views/admin/ad_banners/_form.html.erb b/app/views/admin/ad_banners/_form.html.erb index b59ce8a..ff12c27 100644 --- a/app/views/admin/ad_banners/_form.html.erb +++ b/app/views/admin/ad_banners/_form.html.erb @@ -1,15 +1,97 @@ -<%#= flash_messages %> -<%#= f.error_messages %> +<% content_for :page_specific_css do %> + <%= stylesheet_link_tag "lib/main-forms" %> + <%= stylesheet_link_tag "lib/fileupload" %> +<% end %> +<% content_for :page_specific_javascript do %> + <%= javascript_include_tag "lib/bootstrap-fileupload" %> + <%= javascript_include_tag "lib/bootstrap-datetimepicker" %> + <%= javascript_include_tag "lib/datetimepicker/datetimepicker.js" %> + <%= javascript_include_tag "lib/module-area" %> + <%= javascript_include_tag "validator" %> + <%= javascript_include_tag "cycle2" %> + <%= javascript_include_tag "ad_banner/banner_preview" %> +<% end %> -<%= f.label :title, t('ad_banner.banner_name') %> -<%= f.text_field :title, class: 'input-large', placeholder: t('ad_banner.banner_name'), id: 'name' %> -<%= t('ad_banner.name_only_english') %> + + +
+ + + +
-<%= f.label :size, t('ad_banner.size') %> - -<%= f.number_field :width, in: 10..1000, step: 10, class: 'input-mini', onkeypress: "if (event.keyCode < 48 || event.keyCode > 57) event.returnValue = false;", id: 'width' %> - -<%= f.number_field :height, in: 10..1000, step: 10, class: 'input-mini', onkeypress: "if (event.keyCode < 48 || event.keyCode > 57) event.returnValue = false;", id: 'height' %> - -<%= f.label :category_id, t('ad_banner.categories') %> -<%= f.select :category_id, @categories, {} %> + +
+ +
+ <%= f.label :title, t('ad_banner.banner_name'), :class => "control-label muted" %> +
+ <%= f.text_field :title, class: 'input-large', placeholder: t('ad_banner.banner_name') %> + <%= t('ad_banner.name_only_english') %> +
+
+ +
+ <%= f.label :timeout, t('ad_banner.transition_interval'), :class => "control-label muted" %> +
+ <%= f.number_field :timeout, in: 0..60, step: 1, class: 'input-mini', onkeypress: "if (event.keyCode < 48 || event.keyCode > 57) event.returnValue = false;" %> + <%= t('ad_banner.number_seconds') %> +
+
+ +
+ <%= f.label :speed, t('ad_banner.transition_speed'), :class => "control-label muted" %> +
+ <%= f.number_field :speed, in: 0..1000, step: 100, class: 'input-mini', onkeypress: "if (event.keyCode < 48 || event.keyCode > 57) event.returnValue = false;" %> + <%= t('ad_banner.number_milliseconds') %> +
+
+ +
+ <%= f.label :size, t('ad_banner.size'), :class => "control-label muted" %> +
+ <%= f.number_field :base_image, in: 1..(@ad_banner.new_record? ? 1 : (@ad_banner.ad_images.count == 0 ? 1 : @ad_banner.ad_images.count)), class: 'input-mini', onkeypress: "if (event.keyCode < 48 || event.keyCode > 57) event.returnValue = false;" %> + Base Image +
+
+ +
+ +
+ <%= select_category(f, @module_app) %> +
+
+ +
+ <%= f.label :size, t('ad_banner.effect'), :class => "control-label muted" %> +
+ <%= f.select :ad_fx, Banner::FX_TYPES, {}, {class: 'ad_banner_ad_fx', id: 'ad_fx'} %> +

<%= t('ad_banner.no_ie_10_effect_support') %>

+
+ <%= image_tag "slideshow_preview_A.png", width: "400", height: 80 %> + <%= image_tag "slideshow_preview_B.png", width: "400", height: 80 %> +
+
+
+
+
+
+ +
+ <%= f.submit t('submit'), class: 'btn btn-primary' %> + + <%= link_to t('cancel'), admin_ad_banners_path(:page => params[:page]), :class=>"btn" %> +
+ diff --git a/app/views/admin/ad_banners/_index.html.erb b/app/views/admin/ad_banners/_index.html.erb index 74d0e11..38b3492 100644 --- a/app/views/admin/ad_banners/_index.html.erb +++ b/app/views/admin/ad_banners/_index.html.erb @@ -86,17 +86,6 @@ position: absolute; opacity: 0.7; } - .ad-banner-subtitle{ - color: #FFF; - background: #000; - font-size: 1.5em; - padding: 3px 15px; - margin-top: 10px; - z-index: 998; - position: absolute; - opacity: 0.7; - left: 15px; - } .ad-banner-info{ display: none; width: 100%; @@ -132,8 +121,8 @@ margin: 0px auto 70px auto; } .ad-banner-images-wrap-arrow{ - width: 0; - height: 0; + width: 0; + height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-bottom: 5px solid #000; @@ -164,8 +153,8 @@ .ad-banner-image{ width: 100%; height: 120px; - background-size: cover; - background-position: center; + background-size: cover; + background-position: center; overflow: hidden; box-shadow: 0 2px 10px #000; } @@ -185,13 +174,6 @@ margin-top: 94px; opacity: 0.9; } - .ad-image-item{ - padding: 2px 20px; - line-height: 22px; - color: #FFF; - background: #000; - opacity: 0.9; - } .ad-image-new-btn{ padding: 4px 10px; border-radius: 3px; @@ -224,7 +206,7 @@ @media all and (max-width: 767px) { .ad-banner-detail{ position: relative; - margin-bottom: 10px; + margin-bottom: 10px; } } @@ -235,9 +217,9 @@
<%= banner.title %>
<% if !banner.ad_images.can_display.blank? %> <% banner.ad_images.can_display.desc(:created_at).each do |image| %> @@ -256,11 +238,12 @@ <% if can_edit_or_delete?(banner) %>
- " - data-id="<%= banner.id.to_s %>" - data-fx="<%= banner.ad_fx %>" + " + data-id="<%= banner.id.to_s %>" + data-fx="<%= banner.ad_fx %>" data-form="<%= banner.data_attribute_hash.to_s %>" - class="open-slide" + data-max="<%= (banner.ad_images.blank? ? "1" : banner.ad_images.count) %>" + class="open-slide" href="#">
@@ -289,16 +272,22 @@ <%= t("ad_banner.size") %> : <%= banner.size %> + <%= t("ad_banner.effect") %> : + <%= banner.ad_fx %> + <%= t("ad_banner.transition_interval") %> : + <%= banner.timeout %> + <%= t("ad_banner.transition_speed") %> : + <%= banner.speed %>
- <% if can_edit_or_delete?(banner) %> + <% if can_edit_or_delete?(banner) && current_user.is_admin? or current_user.is_manager?(@module_app) or current_user.is_sub_manager?(@module_app) %>
- <%= t("new_image") %> + <%= t("ad.new_image") %> <% banner.ad_images.desc(:created_at).each_with_index do |image,idx| %>
diff --git a/app/views/admin/ad_banners/_index_table.html.erb b/app/views/admin/ad_banners/_index_table.html.erb new file mode 100644 index 0000000..7604c6a --- /dev/null +++ b/app/views/admin/ad_banners/_index_table.html.erb @@ -0,0 +1,70 @@ +<% content_for :page_specific_css do %> + +<% end %> + + + + <% @table_fields.each do |f| %> + <%= thead(f) %> + <% end %> + + + + <% user_has_rights = (current_user.is_admin? ? true : (current_user.is_manager?(@module_app) ? true : current_user.is_manager_with_role?(@module_app) ? true : false)) rescue false %> + <% @banners.each do |banner| %> + + + + + + <% end %> + +
+
+ <% if !banner.ad_images.can_display.blank? %> + <% banner.ad_images.can_display.desc(:created_at).each do |image| %> +
'); background-size: cover; background-position: center;">
+ <% end %> + <% else %> +
+
+ <% end %> + +
+
+ <%= banner.title rescue "" %> +
+ +
+
+ <%= banner.category.title rescue "" %> +
+
+<% if user_has_rights %> + +<% end %> + <%= content_tag :div, paginate(@banners), class: "pagination pagination-centered" %> +
diff --git a/app/views/admin/ad_banners/edit.html.erb b/app/views/admin/ad_banners/edit.html.erb new file mode 100644 index 0000000..e8adef8 --- /dev/null +++ b/app/views/admin/ad_banners/edit.html.erb @@ -0,0 +1,5 @@ +<%= form_for @ad_banner, url: admin_ad_banner_path(@ad_banner), html: {class: "form-horizontal main-forms"} do |f| %> +
+ <%= render partial: 'form', locals: {f: f} %> +
+<% end %> \ No newline at end of file diff --git a/app/views/admin/ad_banners/index.html.erb b/app/views/admin/ad_banners/index.html.erb index 30aeb35..e41330f 100644 --- a/app/views/admin/ad_banners/index.html.erb +++ b/app/views/admin/ad_banners/index.html.erb @@ -3,44 +3,12 @@ <%= javascript_include_tag "cycle2" %> <%= javascript_include_tag "ad_banner/banner_preview" %> <% end %> - - - -<% if current_user.is_admin? or current_user.is_manager?(@module_app) %> - - -
-
- - - - -
-
-
-
- <%= form_for :ad_banner, url: nil, remote: true do |f| %> -
- <%= render :partial => "form", :locals => { :f => f } %> -
- <%= t(:cancel) %> - <%= f.submit t(:submit), class: 'btn btn-primary btn-small' %> -
-
- <% end %> -
-
-
-
- -<% end %> -<%= render 'layouts/delete_modal', delete_options: @delete_options %> \ No newline at end of file +<%= render_filter @filter_fields, "index_table" %> + + <%= render 'index_table'%> + + \ No newline at end of file diff --git a/app/views/admin/ad_banners/new.html.erb b/app/views/admin/ad_banners/new.html.erb new file mode 100644 index 0000000..04550d4 --- /dev/null +++ b/app/views/admin/ad_banners/new.html.erb @@ -0,0 +1,5 @@ +<%= form_for @ad_banner, url: admin_ad_banners_path, html: {class: "form-horizontal main-forms"} do |f| %> +
+ <%= render partial: 'form', locals: {f: f} %> +
+<% end %> \ No newline at end of file diff --git a/app/views/admin/ad_banners/show.html.erb b/app/views/admin/ad_banners/show.html.erb new file mode 100644 index 0000000..5e302fc --- /dev/null +++ b/app/views/admin/ad_banners/show.html.erb @@ -0,0 +1,155 @@ +<% content_for :page_specific_javascript do %> + <%= javascript_include_tag "lib/jquery-ui-sortable.min" %> +<% end %> +<% content_for :page_specific_css do %> + +<% end %> +

+ <%= @banner.title %> + +

+ + + + + <% @table_fields.each do |f| %> + <%= thead(f) %> + <% end %> + + + + <% @images.each do |image| %> + + + + + + + <% end %> + +
+ <% if image.exchange_item == "1" %> + <%= image_tag image.file.thumb, :class => "banner-image" %> + <% else %> + + <% end %> + + <%= image.title rescue "" %> + <% if can_edit_or_delete?(@banner) %> + + <% end %> + + <% if !image.postdate.nil? %> + <%= image.postdate.strftime("%Y-%m-%d %H:%M") rescue "" %> + <% if !image.deadline.nil? %> + ~ <%= image.deadline.strftime("%Y-%m-%d %H:%M") rescue "" %> + <% if image.expired? %> + <%= t("ad_banner.expired") %> + <% end %> + <% end %> + <% end %> + + <% if image.out_link != "" %> + " target="_blank">Link + <% end %> +
+ + <% if can_edit_or_delete?(@banner) %> +
+ + <%= content_tag :div, paginate(@images), class: "pagination pagination-centered" %> +
+ + + <% end %> + + + diff --git a/app/views/admin/ad_images/_form.html.erb b/app/views/admin/ad_images/_form.html.erb index 6a8fa50..64fcd9c 100644 --- a/app/views/admin/ad_images/_form.html.erb +++ b/app/views/admin/ad_images/_form.html.erb @@ -7,10 +7,11 @@ <%= javascript_include_tag "lib/bootstrap-datetimepicker" %> <%= javascript_include_tag "lib/datetimepicker/datetimepicker.js" %> <%= javascript_include_tag "lib/module-area" %> + <%= javascript_include_tag "validator" %> <% end %> <%#= f.error_messages %> - +
@@ -139,9 +140,9 @@
-
@@ -159,7 +160,7 @@
<% @site_in_use_locales.each_with_index do |locale, i| %> - +
"> @@ -187,7 +188,6 @@ <%= f.submit t('submit'), class: 'btn btn-primary' %>
-