tb_banners 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 +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
|