spud_banners 0.0.1
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.
- data/MIT-LICENSE +20 -0
- data/Rakefile +40 -0
- data/Readme.markdown +128 -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 +161 -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 +71 -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 +37 -0
- data/app/models/spud_banner.rb +51 -0
- data/app/models/spud_banner_set.rb +30 -0
- data/app/observers/spud_banner_sweeper.rb +44 -0
- data/app/views/spud/admin/banner_sets/_banner_set.html.erb +8 -0
- data/app/views/spud/admin/banner_sets/_form.html.erb +32 -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 +47 -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/lib/responds_to_parent.rb +69 -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/spud_banners.rb +8 -0
- data/lib/tasks/spud_banners_tasks.rake +4 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/fixtures/spud_banner_sets.yml +15 -0
- data/test/fixtures/spud_banners.yml +15 -0
- data/test/functional/spud/admin/banner_sets_controller_test.rb +7 -0
- data/test/functional/spud/admin/banners_controller_test.rb +7 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/spud_banners_test.rb +7 -0
- data/test/test_helper.rb +15 -0
- data/test/unit/helpers/spud/admin/banner_sets_helper_test.rb +4 -0
- data/test/unit/helpers/spud/admin/banners_helper_test.rb +4 -0
- data/test/unit/spud_banner_set_test.rb +7 -0
- data/test/unit/spud_banner_test.rb +7 -0
- metadata +234 -0
@@ -0,0 +1,37 @@
|
|
1
|
+
module SpudBannersHelper
|
2
|
+
|
3
|
+
def spud_banners_for_set(set_or_identifier, options = {})
|
4
|
+
if set_or_identifier.is_a?(SpudBannerSet)
|
5
|
+
banner_set = set_or_identifier
|
6
|
+
else
|
7
|
+
banner_set = SpudBannerSet.find_by_identifier(set_or_identifier)
|
8
|
+
end
|
9
|
+
return '' if banner_set.blank?
|
10
|
+
if block_given?
|
11
|
+
banner_set.banners.each do |banner|
|
12
|
+
yield(banner)
|
13
|
+
end
|
14
|
+
else
|
15
|
+
content_tag(:div, :class => 'spud_banner_set', 'data-id' => banner_set.id) do
|
16
|
+
banner_set.banners.map do |banner|
|
17
|
+
concat(content_tag(:div, :class => 'spud_banner_set_banner', 'data-id' => banner.id){ spud_banner_tag(banner) })
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def spud_banner_tag(banner)
|
24
|
+
if banner.link_to.blank?
|
25
|
+
spud_banner_image_tag(banner)
|
26
|
+
else
|
27
|
+
link_to(banner.link_to, :target => banner.link_target) do
|
28
|
+
spud_banner_image_tag(banner)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def spud_banner_image_tag(banner)
|
34
|
+
image_tag(banner.banner.url(:banner), :alt => banner.alt, :title => banner.title)
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
class SpudBanner < ActiveRecord::Base
|
2
|
+
attr_accessible :banner, :link_to, :link_target, :title, :alt, :sort_order
|
3
|
+
belongs_to :owner, :class_name => 'SpudBannerSet', :foreign_key => 'spud_banner_set_id'
|
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 self.banners_for_set(identifier)
|
32
|
+
case identifier.class
|
33
|
+
when String
|
34
|
+
banner_set = SpudBannerSet.find_by_name(identifier)
|
35
|
+
when Symbol
|
36
|
+
banner_set = SpudBannerSet.find_by_name(identifier.to_s.titleize)
|
37
|
+
when Number
|
38
|
+
banner_set = SpudBannerSet.find(identifier)
|
39
|
+
end
|
40
|
+
if banner_set
|
41
|
+
return banner_set.banners
|
42
|
+
else
|
43
|
+
return []
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def set_name
|
48
|
+
return owner.name
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class SpudBannerSet < ActiveRecord::Base
|
2
|
+
attr_accessible :cropped, :height, :name, :short_name, :width
|
3
|
+
has_many :banners, :class_name => 'SpudBanner', :order => 'sort_order asc', :dependent => :destroy
|
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,44 @@
|
|
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
|
+
expire_cache_for(record)
|
12
|
+
end
|
13
|
+
|
14
|
+
def after_destroy(record)
|
15
|
+
expire_cache_for(record)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def expire_cache_for(record)
|
21
|
+
# lazy full page cache clear
|
22
|
+
cache_path = ActionController::Base.page_cache_directory
|
23
|
+
if cache_path != Rails.root && cache_path != Rails.public_path && File.directory?(cache_path)
|
24
|
+
FileUtils.rm_rf(cache_path)
|
25
|
+
end
|
26
|
+
|
27
|
+
# reprocess cached liquid tags
|
28
|
+
if defined?(Spud::Cms)
|
29
|
+
values = [record.set_name]
|
30
|
+
values << @old_name if !@old_name.blank?
|
31
|
+
SpudPageLiquidTag.where(:tag_name => "snippet",:value => values).includes(:attachment).each do |tag|
|
32
|
+
partial = tag.attachment
|
33
|
+
partial.postprocess_content
|
34
|
+
partial.save
|
35
|
+
page = partial.try(:spud_page)
|
36
|
+
if page.blank? == false
|
37
|
+
page.updated_at = Time.now.utc
|
38
|
+
page.save
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
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,32 @@
|
|
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
|
+
</fieldset>
|
31
|
+
|
32
|
+
<% 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,47 @@
|
|
1
|
+
<%= form_for @banner, :url => path, :html => {:class => 'form-horizontal 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
|
+
</fieldset>
|
40
|
+
|
41
|
+
<div class="progress progress-striped active spud_banner_upload_progress">
|
42
|
+
<div class="bar"></div>
|
43
|
+
</div>
|
44
|
+
|
45
|
+
<% end %>
|
46
|
+
|
47
|
+
<iframe id="spud_banners_upload_target" name="spud_banners_upload_target" style="display:none;"></iframe>
|
@@ -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
|
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,69 @@
|
|
1
|
+
# Copyright (c) 2006 Sean Treadway
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
# a copy of this software and associated documentation files (the
|
5
|
+
# "Software"), to deal in the Software without restriction, including
|
6
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
# the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be
|
12
|
+
# included in all copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
22
|
+
|
23
|
+
# Module containing the methods useful for child IFRAME to parent window communication
|
24
|
+
module RespondsToParent
|
25
|
+
|
26
|
+
# Executes the response body as JavaScript in the context of the parent window.
|
27
|
+
# Use this method of you are posting a form to a hidden IFRAME or if you would like
|
28
|
+
# to use IFRAME base RPC.
|
29
|
+
def responds_to_parent(&block)
|
30
|
+
yield
|
31
|
+
|
32
|
+
if performed?
|
33
|
+
# We're returning HTML instead of JS or XML now
|
34
|
+
response.headers['Content-Type'] = 'text/html; charset=UTF-8'
|
35
|
+
|
36
|
+
# Either pull out a redirect or the request body
|
37
|
+
script = if response.headers['Location']
|
38
|
+
#TODO: erase_redirect_results is missing in rails 3.0 has to be implemented
|
39
|
+
# erase redirect
|
40
|
+
"document.location.href = #{location.to_s.inspect}"
|
41
|
+
else
|
42
|
+
response.body
|
43
|
+
end
|
44
|
+
|
45
|
+
# Escape quotes, linebreaks and slashes, maintaining previously escaped slashes
|
46
|
+
# Suggestions for improvement?
|
47
|
+
script = (script || '').
|
48
|
+
gsub('\\', '\\\\\\').
|
49
|
+
gsub(/\r\n|\r|\n/, '\\n').
|
50
|
+
gsub(/['"]/, '\\\\\&').
|
51
|
+
gsub('</script>','</scr"+"ipt>')
|
52
|
+
|
53
|
+
# Clear out the previous render to prevent double render
|
54
|
+
response.request.env['action_controller.instance'].instance_variable_set(:@_response_body, nil)
|
55
|
+
|
56
|
+
# Eval in parent scope and replace document location of this frame
|
57
|
+
# so back button doesn't replay action on targeted forms
|
58
|
+
# loc = document.location to be set after parent is updated for IE
|
59
|
+
# with(window.parent) - pull in variables from parent window
|
60
|
+
# setTimeout - scope the execution in the windows parent for safari
|
61
|
+
# window.eval - legal eval for Opera
|
62
|
+
render :text => "<html><body><script type='text/javascript' charset='utf-8'>
|
63
|
+
var loc = document.location;
|
64
|
+
with(window.parent) { setTimeout(function() { window.eval('#{script}'); if (typeof(loc) !== 'undefined') loc.replace('about:blank'); }, 1) };
|
65
|
+
</script></body></html>".html_safe
|
66
|
+
end
|
67
|
+
end
|
68
|
+
alias respond_to_parent responds_to_parent
|
69
|
+
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 'spud_core'
|
2
|
+
require 'paperclip'
|
3
|
+
require 'liquid'
|
4
|
+
|
5
|
+
module Spud
|
6
|
+
module Banners
|
7
|
+
class Engine < Rails::Engine
|
8
|
+
engine_name :spud_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/photos/photo_albums_thumb.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
|
data/lib/spud_banners.rb
ADDED