tb_banners 1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/MIT-LICENSE +20 -0
- data/README.markdown +144 -0
- data/Rakefile +40 -0
- data/app/assets/images/spud/admin/banners/banners.png +0 -0
- data/app/assets/images/spud/admin/banners/banners@2x.png +0 -0
- data/app/assets/javascripts/spud/admin/banners/application.js +2 -0
- data/app/assets/javascripts/spud/admin/banners/banner_sets.js +102 -0
- data/app/assets/javascripts/spud/admin/banners/banners.js +187 -0
- data/app/assets/stylesheets/spud/admin/banners/application.css +4 -0
- data/app/assets/stylesheets/spud/admin/banners/banner_sets.css +27 -0
- data/app/assets/stylesheets/spud/admin/banners/banners.css +36 -0
- data/app/controllers/spud/admin/banner_sets_controller.rb +68 -0
- data/app/controllers/spud/admin/banners_controller.rb +104 -0
- data/app/helpers/spud/admin/banner_sets_helper.rb +2 -0
- data/app/helpers/spud/admin/banners_helper.rb +2 -0
- data/app/helpers/spud_banners_helper.rb +38 -0
- data/app/models/spud_banner.rb +35 -0
- data/app/models/spud_banner_set.rb +30 -0
- data/app/observers/spud_banner_sweeper.rb +52 -0
- data/app/views/spud/admin/banner_sets/_banner_set.html.erb +8 -0
- data/app/views/spud/admin/banner_sets/_form.html.erb +38 -0
- data/app/views/spud/admin/banner_sets/create.html.erb +1 -0
- data/app/views/spud/admin/banner_sets/edit.html.erb +1 -0
- data/app/views/spud/admin/banner_sets/index.html.erb +12 -0
- data/app/views/spud/admin/banner_sets/new.html.erb +1 -0
- data/app/views/spud/admin/banner_sets/show.html.erb +11 -0
- data/app/views/spud/admin/banners/_banner.html.erb +7 -0
- data/app/views/spud/admin/banners/_form.html.erb +59 -0
- data/app/views/spud/admin/banners/edit.html.erb +1 -0
- data/app/views/spud/admin/banners/legacy.js.erb +5 -0
- data/app/views/spud/admin/banners/new.html.erb +1 -0
- data/app/views/spud/admin/banners/show.html.erb +1 -0
- data/config/routes.rb +14 -0
- data/db/migrate/20121116195139_create_spud_banners.rb +15 -0
- data/db/migrate/20121116195312_create_spud_banner_sets.rb +12 -0
- data/db/migrate/20130614132846_add_rich_text_to_spud_banners.rb +6 -0
- data/lib/spud_banners/configuration.rb +10 -0
- data/lib/spud_banners/engine.rb +25 -0
- data/lib/spud_banners/liquid_tags.rb +32 -0
- data/lib/spud_banners/version.rb +5 -0
- data/lib/tasks/spud_banners_tasks.rake +4 -0
- data/lib/tb_banners.rb +7 -0
- data/spec/controllers/spud/admin/banner_sets_controller_spec.rb +100 -0
- data/spec/dummy/README.rdoc +261 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config/application.rb +59 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +14 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +37 -0
- data/spec/dummy/config/environments/production.rb +67 -0
- data/spec/dummy/config/environments/test.rb +37 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +3 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/migrate/20121127192246_create_spud_admin_permissions.spud_core.rb +12 -0
- data/spec/dummy/db/migrate/20121127192247_create_spud_users.spud_core.rb +30 -0
- data/spec/dummy/db/migrate/20121127192248_add_time_zone_to_spud_user.spud_core.rb +7 -0
- data/spec/dummy/db/migrate/20121127192249_add_scope_to_spud_admin_permissions.spud_core.rb +7 -0
- data/spec/dummy/db/migrate/20121127192250_create_spud_user_settings.spud_core.rb +12 -0
- data/spec/dummy/db/schema.rb +87 -0
- data/spec/dummy/log/development.log +72 -0
- data/spec/dummy/log/test.log +9059 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/spec_helper.rb +40 -0
- data/spec/support/authlogic_helper.rb +2 -0
- metadata +331 -0
@@ -0,0 +1,104 @@
|
|
1
|
+
class Spud::Admin::BannersController < Spud::Admin::ApplicationController
|
2
|
+
|
3
|
+
include RespondsToParent
|
4
|
+
|
5
|
+
cache_sweeper :spud_banner_sweeper, :only => [:create, :update, :destroy]
|
6
|
+
before_filter :get_set, :only => [:new, :create]
|
7
|
+
before_filter :get_record, :only => [:edit, :update, :destroy]
|
8
|
+
respond_to :html
|
9
|
+
layout false
|
10
|
+
|
11
|
+
def new
|
12
|
+
@banner = @banner_set.banners.new
|
13
|
+
respond_with @banner
|
14
|
+
end
|
15
|
+
|
16
|
+
def create
|
17
|
+
@banner = @banner_set.banners.build
|
18
|
+
@banner.attributes = params[:spud_banner]
|
19
|
+
|
20
|
+
last_banner = SpudBanner.select('sort_order').where(:spud_banner_set_id => @banner_set.id).order('sort_order desc').first
|
21
|
+
if last_banner
|
22
|
+
@banner.sort_order = last_banner.sort_order + 1
|
23
|
+
end
|
24
|
+
|
25
|
+
if request.xhr?
|
26
|
+
if @banner.save
|
27
|
+
flash.now[:notice] = 'SpudBanner created successfully'
|
28
|
+
render 'show'
|
29
|
+
else
|
30
|
+
render 'new', :status => 422
|
31
|
+
end
|
32
|
+
else
|
33
|
+
@banner.save
|
34
|
+
respond_to_parent do
|
35
|
+
render 'legacy', :formats => [:js]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def edit
|
41
|
+
respond_with @banner
|
42
|
+
end
|
43
|
+
|
44
|
+
def update
|
45
|
+
if request.xhr?
|
46
|
+
if @banner.update_attributes(params[:spud_banner])
|
47
|
+
flash.now[:notice] = 'SpudBanner created successfully'
|
48
|
+
render 'show'
|
49
|
+
else
|
50
|
+
render 'edit', :status => 422
|
51
|
+
end
|
52
|
+
else
|
53
|
+
@banner.update_attributes(params[:spud_banner])
|
54
|
+
respond_to_parent do
|
55
|
+
render 'legacy', :formats => [:js]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def destroy
|
61
|
+
if @banner.destroy
|
62
|
+
flash.now[:notice] = 'SpudBanner deleted successfully'
|
63
|
+
status = 200
|
64
|
+
else
|
65
|
+
status = 422
|
66
|
+
end
|
67
|
+
render :nothing => true, :status => status
|
68
|
+
end
|
69
|
+
|
70
|
+
def sort
|
71
|
+
banner_ids = params[:spud_banner_ids]
|
72
|
+
banners = SpudBanner.where(:id => banner_ids).to_a
|
73
|
+
SpudBanner.transaction do
|
74
|
+
banner_ids.each_with_index do |id, index|
|
75
|
+
banner = banners.select{ |b| b.id == id.to_i }.first
|
76
|
+
banner.update_attribute(:sort_order, index)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
render :nothing => true, :status => 200
|
80
|
+
end
|
81
|
+
|
82
|
+
private
|
83
|
+
|
84
|
+
def get_set
|
85
|
+
begin
|
86
|
+
@banner_set = SpudBannerSet.find(params[:banner_set_id])
|
87
|
+
rescue ActiveRecord::RecordNotFound => e
|
88
|
+
flash.now[:error] = "Could not find the requested SpudBannerSet"
|
89
|
+
render :nothing => true, :status => 404
|
90
|
+
return false
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def get_record
|
95
|
+
begin
|
96
|
+
@banner = SpudBanner.find(params[:id])
|
97
|
+
rescue ActiveRecord::RecordNotFound => e
|
98
|
+
flash.now[:error] = "Could not find the requested SpudBanner"
|
99
|
+
redirect_to spud_admin_banner_sets_path
|
100
|
+
return false
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module SpudBannersHelper
|
2
|
+
|
3
|
+
def spud_banners_for_set(set_or_identifier, options = {})
|
4
|
+
limit = options[:limit] || false
|
5
|
+
if set_or_identifier.is_a?(SpudBannerSet)
|
6
|
+
banner_set = set_or_identifier
|
7
|
+
else
|
8
|
+
banner_set = SpudBannerSet.find_by_identifier(set_or_identifier)
|
9
|
+
end
|
10
|
+
return '' if banner_set.blank?
|
11
|
+
if block_given?
|
12
|
+
banner_set.banners.limit(limit).each do |banner|
|
13
|
+
yield(banner)
|
14
|
+
end
|
15
|
+
else
|
16
|
+
content_tag(:div, :class => 'spud_banner_set', 'data-id' => banner_set.id) do
|
17
|
+
banner_set.banners.limit(limit).map do |banner|
|
18
|
+
concat(content_tag(:div, :class => 'spud_banner_set_banner', 'data-id' => banner.id){ spud_banner_tag(banner) })
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def spud_banner_tag(banner)
|
25
|
+
if banner.link_to.blank?
|
26
|
+
spud_banner_image_tag(banner)
|
27
|
+
else
|
28
|
+
link_to(banner.link_to, :target => banner.link_target) do
|
29
|
+
spud_banner_image_tag(banner)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def spud_banner_image_tag(banner)
|
35
|
+
image_tag(banner.banner.url(:banner), :alt => banner.alt, :title => banner.title)
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class SpudBanner < ActiveRecord::Base
|
2
|
+
attr_accessible :banner, :link_to, :link_target, :title, :alt, :sort_order, :rich_text
|
3
|
+
belongs_to :owner, :class_name => 'SpudBannerSet', :foreign_key => 'spud_banner_set_id', :inverse_of => :banners
|
4
|
+
|
5
|
+
has_attached_file :banner,
|
6
|
+
:styles => lambda { |attachment| attachment.instance.dynamic_styles },
|
7
|
+
:convert_options => {
|
8
|
+
:admin_small => '-strip -density 72x72',
|
9
|
+
:banner => '-strip -density 72x72'
|
10
|
+
},
|
11
|
+
:storage => Spud::Banners.paperclip_storage,
|
12
|
+
:s3_credentials => Spud::Banners.s3_credentials,
|
13
|
+
:url => Spud::Banners.storage_url,
|
14
|
+
:path => Spud::Banners.storage_path
|
15
|
+
|
16
|
+
validates_attachment_presence :banner
|
17
|
+
|
18
|
+
def dynamic_styles
|
19
|
+
styles = {
|
20
|
+
:spud_admin_small => '300x150'
|
21
|
+
}
|
22
|
+
owner_style = nil
|
23
|
+
if self.owner
|
24
|
+
owner_style = "#{self.owner.width}x#{self.owner.height}"
|
25
|
+
owner_style += '#' if self.owner.cropped
|
26
|
+
styles[:banner] = owner_style
|
27
|
+
end
|
28
|
+
return styles
|
29
|
+
end
|
30
|
+
|
31
|
+
def set_name
|
32
|
+
return owner.name
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class SpudBannerSet < ActiveRecord::Base
|
2
|
+
attr_accessible :cropped, :height, :name, :short_name, :width, :has_rich_text
|
3
|
+
has_many :banners, :class_name => 'SpudBanner', :order => 'sort_order asc', :dependent => :destroy, :inverse_of => :owner
|
4
|
+
|
5
|
+
validates_presence_of :name
|
6
|
+
validates_uniqueness_of :name
|
7
|
+
validates_numericality_of :width, :height
|
8
|
+
|
9
|
+
def self.find_by_identifier(identifier)
|
10
|
+
if identifier.class == String
|
11
|
+
banner_set = SpudBannerSet.find_by_name(identifier)
|
12
|
+
elsif identifier.class == Symbol
|
13
|
+
banner_set = SpudBannerSet.find_by_name(identifier.to_s.titleize)
|
14
|
+
else
|
15
|
+
banner_set = SpudBannerSet.find(identifier)
|
16
|
+
end
|
17
|
+
return banner_set
|
18
|
+
end
|
19
|
+
|
20
|
+
def reprocess_banners!
|
21
|
+
self.banners.each do |banner|
|
22
|
+
banner.banner.reprocess!
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def set_name
|
27
|
+
return name
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
class SpudBannerSweeper < ActionController::Caching::Sweeper
|
2
|
+
observe :spud_banner, :spud_banner_set
|
3
|
+
|
4
|
+
def before_save(record)
|
5
|
+
if record.is_a?(SpudBannerSet)
|
6
|
+
@old_name = record.name
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def after_save(record)
|
11
|
+
if record.is_a?(SpudBanner)
|
12
|
+
expire_cache_for(record.owner)
|
13
|
+
else
|
14
|
+
expire_cache_for(record)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def after_destroy(record)
|
19
|
+
if record.is_a?(SpudBanner)
|
20
|
+
expire_cache_for(record.owner)
|
21
|
+
else
|
22
|
+
expire_cache_for(record)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def expire_cache_for(record)
|
29
|
+
# lazy full page cache clear
|
30
|
+
cache_path = ActionController::Base.page_cache_directory
|
31
|
+
if cache_path != Rails.root && cache_path != Rails.public_path && File.directory?(cache_path)
|
32
|
+
FileUtils.rm_rf(cache_path)
|
33
|
+
end
|
34
|
+
|
35
|
+
# reprocess cached liquid tags
|
36
|
+
if defined?(Spud::Cms)
|
37
|
+
values = [record.set_name]
|
38
|
+
values << @old_name if !@old_name.blank?
|
39
|
+
SpudPageLiquidTag.where(:tag_name => "banner_set",:value => values).includes(:attachment).each do |tag|
|
40
|
+
partial = tag.attachment
|
41
|
+
partial.postprocess_content
|
42
|
+
partial.save
|
43
|
+
page = partial.try(:spud_page)
|
44
|
+
if page.blank? == false
|
45
|
+
page.updated_at = Time.now.utc
|
46
|
+
page.save
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<%= content_tag :li, :class => 'spud_admin_banner_sets_list_item', 'data-id' => banner_set.id do %>
|
2
|
+
<%= banner_set.name %>
|
3
|
+
<span class="spud_admin_banner_sets_list_item_actions">
|
4
|
+
<%= link_to 'Manage Banners', spud_admin_banner_set_path(banner_set), :class => 'btn btn-small' %>
|
5
|
+
<%= link_to 'Edit Configuration', edit_spud_admin_banner_set_path(banner_set), :class => 'btn btn-small spud_banner_sets_edit' %>
|
6
|
+
<%= link_to 'Delete', spud_admin_banner_set_path(banner_set), :class => 'btn btn-small btn-danger spud_banner_sets_delete' %>
|
7
|
+
</span>
|
8
|
+
<% end %>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<%= form_for @banner_set, :url => path, :html => {:class => 'form-horizontal spud_banner_set_form'} do |f| %>
|
2
|
+
|
3
|
+
<%= error_messages_for(f.object) %>
|
4
|
+
|
5
|
+
<fieldset>
|
6
|
+
<div class="control-group">
|
7
|
+
<%= f.label :name, "Name",:class => "control-label" %>
|
8
|
+
<div class="controls">
|
9
|
+
<%= f.text_field :name %>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
<div class="control-group">
|
13
|
+
<%= f.label :width, "Width", :class => "control-label" %>
|
14
|
+
<div class="controls">
|
15
|
+
<%= f.text_field :width %>
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
<div class="control-group">
|
19
|
+
<%= f.label :height, "Height", :class => "control-label" %>
|
20
|
+
<div class="controls">
|
21
|
+
<%= f.text_field :height %>
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
<div class="control-group">
|
25
|
+
<%= f.label :cropped, "Cropped", :class => "control-label" %>
|
26
|
+
<div class="controls">
|
27
|
+
<%= f.check_box :cropped %>
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
<div class="control-group">
|
31
|
+
<%= f.label :has_rich_text, "Allow Rich Text", :class => "control-label" %>
|
32
|
+
<div class="controls">
|
33
|
+
<%= f.check_box :has_rich_text %>
|
34
|
+
</div>
|
35
|
+
</div>
|
36
|
+
</fieldset>
|
37
|
+
|
38
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render :partial => 'banner_set', :locals => {:banner_set => @banner_set} %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render :partial => 'form', :locals => {:path => spud_admin_banner_set_path(@banner_set)} %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<% content_for :data_controls do %>
|
2
|
+
<%= link_to "New Banner Set", new_spud_admin_banner_set_path, :class => "btn btn-primary spud_banner_sets_add_new", :title => "New Banner Set" %>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<% content_for :detail do %>
|
6
|
+
<ul class="spud_admin_banner_sets_list">
|
7
|
+
<%= render :partial => 'banner_set', :collection => @banner_sets %>
|
8
|
+
</ul>
|
9
|
+
<script>
|
10
|
+
$(document).ready(spud.admin.banner_sets.init);
|
11
|
+
</script>
|
12
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render :partial => 'form', :locals => {:path => spud_admin_banner_sets_path} %>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<% content_for :data_controls do %>
|
2
|
+
<%= link_to 'Upload Banner', new_spud_admin_banner_set_banner_path(@banner_set), :class => 'btn btn-primary spud_banner_add_new' %>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<div class="spud_banner_set_banners_container">
|
6
|
+
<%= render :partial => 'spud/admin/banners/banner', :collection => @banner_set.banners %>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<script>
|
10
|
+
$(document).ready(spud.admin.banners.init);
|
11
|
+
</script>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<%= content_tag :div, 'data-id' => banner.id, :class => 'spud_banner_set_banner_item' do %>
|
2
|
+
<%= image_tag banner.banner.url(:spud_admin_small) %>
|
3
|
+
<div class="spud_banner_set_banner_item_actions">
|
4
|
+
<%= link_to 'Edit', edit_spud_admin_banner_path(banner), :class => 'spud_banner_set_banner_item_edit' %>
|
5
|
+
<%= link_to 'Delete', spud_admin_banner_path(banner), :class => 'spud_banner_set_banner_item_delete' %>
|
6
|
+
</div>
|
7
|
+
<% end %>
|
@@ -0,0 +1,59 @@
|
|
1
|
+
<%= form_for @banner, :url => path, :html => {:class => 'spud_banner_form', :target => 'spud_banners_upload_target'} do |f| %>
|
2
|
+
|
3
|
+
<%= error_messages_for(f.object) %>
|
4
|
+
|
5
|
+
<fieldset>
|
6
|
+
<div class="control-group">
|
7
|
+
<%= f.label :link_to, 'Link to', :class => 'control-label' %>
|
8
|
+
<div class="controls">
|
9
|
+
<%= f.text_field :link_to %>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
<div class="control-group">
|
13
|
+
<%= f.label :link_target, 'Open Link in', :class => 'control-label' %>
|
14
|
+
<div class="controls">
|
15
|
+
<%= f.select :link_target, options_for_select([
|
16
|
+
['Same Window', '_self'],
|
17
|
+
['New Window', '_blank']
|
18
|
+
], @banner.link_target) %>
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
<div class="control-group">
|
22
|
+
<%= f.label :title, 'Image Title', :class => 'control-label' %>
|
23
|
+
<div class="controls">
|
24
|
+
<%= f.text_field :title %>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
<div class="control-group">
|
28
|
+
<%= f.label :alt, 'Alt Text', :class => 'control-label' %>
|
29
|
+
<div class="controls">
|
30
|
+
<%= f.text_field :alt %>
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
<div class="control-group">
|
34
|
+
<%= f.label :banner, 'Banner', :class => 'control-label' %>
|
35
|
+
<div class="controls">
|
36
|
+
<%= f.file_field :banner %>
|
37
|
+
</div>
|
38
|
+
</div>
|
39
|
+
<% if @banner.owner.has_rich_text? %>
|
40
|
+
<div class="control-group">
|
41
|
+
<%= f.label :rich_text, 'Rich Text', :class => 'control-label' %>
|
42
|
+
<div class="controls">
|
43
|
+
<%= f.text_area :rich_text, :class => 'spud_banner_rich_text' %>
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
<% end %>
|
47
|
+
</fieldset>
|
48
|
+
|
49
|
+
<div class="progress progress-striped active spud_banner_upload_progress">
|
50
|
+
<div class="bar"></div>
|
51
|
+
</div>
|
52
|
+
|
53
|
+
<% end %>
|
54
|
+
|
55
|
+
<iframe id="spud_banners_upload_target" name="spud_banners_upload_target" style="display:none;"></iframe>
|
56
|
+
|
57
|
+
<script>
|
58
|
+
$(document).ready(spud.admin.banners.form);
|
59
|
+
</script>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render :partial => 'form', :locals => {:path => spud_admin_banner_path(@banner)} %>
|
@@ -0,0 +1,5 @@
|
|
1
|
+
<% if @banner.errors.any? %>
|
2
|
+
spud.admin.banners.onLegacyUploadError("<%= escape_javascript(render :partial => 'form', :locals => {:path => spud_admin_banner_set_banners_path(@banner_set)}) %>");
|
3
|
+
<% else %>
|
4
|
+
spud.admin.banners.onLegacyUploadComplete("<%= escape_javascript(render :partial => 'banner', :locals => {:banner => @banner}) %>");
|
5
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render :partial => 'form', :locals => {:path => spud_admin_banner_set_banners_path(@banner_set)} %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render :partial => 'banner', :locals => {:banner => @banner} %>
|
data/config/routes.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
Rails.application.routes.draw do
|
2
|
+
|
3
|
+
namespace :spud do
|
4
|
+
namespace :admin do
|
5
|
+
resources :banner_sets do
|
6
|
+
resources :banners, :only => [:new, :create]
|
7
|
+
end
|
8
|
+
resources :banners, :only => [:show, :edit, :update, :destroy] do
|
9
|
+
put :sort, :on => :collection
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class CreateSpudBanners < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :spud_banners do |t|
|
4
|
+
t.integer :spud_banner_set_id, :null => false
|
5
|
+
t.string :link_to
|
6
|
+
t.string :link_target, :default => '_self'
|
7
|
+
t.string :title
|
8
|
+
t.string :alt
|
9
|
+
t.integer :sort_order, :default => 0
|
10
|
+
t.attachment :banner
|
11
|
+
t.timestamps
|
12
|
+
end
|
13
|
+
add_index :spud_banners, :spud_banner_set_id, :unique => false
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreateSpudBannerSets < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :spud_banner_sets do |t|
|
4
|
+
t.string :name, :null => false
|
5
|
+
t.integer :width, :null => false
|
6
|
+
t.integer :height, :null => false
|
7
|
+
t.boolean :cropped, :default => true
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
add_index :spud_banner_sets, :name, :unique => true
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module Spud
|
2
|
+
module Banners
|
3
|
+
include ActiveSupport::Configurable
|
4
|
+
config_accessor :paperclip_storage, :s3_credentials, :storage_path, :storage_url
|
5
|
+
self.paperclip_storage = :filesystem
|
6
|
+
self.s3_credentials = "#{Rails.root}/config/s3.yml"
|
7
|
+
self.storage_path = ":rails_root/public/system/spud_banners/:id/:style/:basename.:extension"
|
8
|
+
self.storage_url = "/system/spud_banners/:id/:style/:basename.:extension"
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'tb_core'
|
2
|
+
require 'paperclip'
|
3
|
+
require 'liquid'
|
4
|
+
|
5
|
+
module Spud
|
6
|
+
module Banners
|
7
|
+
class Engine < Rails::Engine
|
8
|
+
engine_name :tb_banners
|
9
|
+
Spud::Core.append_admin_stylesheets('spud/admin/banners/application')
|
10
|
+
Spud::Core.append_admin_javascripts('spud/admin/banners/application')
|
11
|
+
initializer :admin do
|
12
|
+
Spud::Core.config.admin_applications += [{
|
13
|
+
:name => 'Banner Sets',
|
14
|
+
:thumbnail => 'spud/admin/banners/banners.png',
|
15
|
+
:retina => true,
|
16
|
+
:url => '/spud/admin/banner_sets',
|
17
|
+
:order => 120
|
18
|
+
}]
|
19
|
+
end
|
20
|
+
initializer :liquid do
|
21
|
+
Liquid::Template.register_tag('spud_banner_set', Spud::Banners::BannerSetTag) if defined?(Liquid::Template)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'liquid'
|
2
|
+
require_relative '../../app/helpers/spud_banners_helper'
|
3
|
+
|
4
|
+
module Spud
|
5
|
+
module Banners
|
6
|
+
class BannerSetTag < Liquid::Tag
|
7
|
+
|
8
|
+
include Sprockets::Helpers::RailsHelper
|
9
|
+
include Sprockets::Helpers::IsolatedHelper
|
10
|
+
include ActionView::Helpers
|
11
|
+
include ActionView::Context
|
12
|
+
include SpudBannersHelper
|
13
|
+
|
14
|
+
def initialize(tag_name, set_identifer, tokens)
|
15
|
+
@banner_set = SpudBannerSet.find_by_identifier(set_identifer)
|
16
|
+
end
|
17
|
+
|
18
|
+
def tag_name
|
19
|
+
return 'banner_set'
|
20
|
+
end
|
21
|
+
|
22
|
+
def tag_value
|
23
|
+
return @banner_set.name
|
24
|
+
end
|
25
|
+
|
26
|
+
def render(context)
|
27
|
+
return spud_banners_for_set(@banner_set)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|