bcms_content_rotator 1.0.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.
- data/README.markdown +1 -0
- data/app/controllers/application_controller.rb +10 -0
- data/app/controllers/cms/slides_controller.rb +2 -0
- data/app/helpers/application_helper.rb +3 -0
- data/app/models/slide.rb +3 -0
- data/app/portlets/content_rotator_portlet.rb +23 -0
- data/app/portlets/helpers/content_rotator_portlet_helper.rb +5 -0
- data/app/views/cms/slides/_form.html.erb +4 -0
- data/app/views/cms/slides/render.html.erb +4 -0
- data/app/views/layouts/templates/default.html.erb +18 -0
- data/app/views/portlets/content_rotator/_form.html.erb +10 -0
- data/app/views/portlets/content_rotator/render.html.erb +64 -0
- data/db/migrate/20101111030324_create_slides.rb +21 -0
- data/lib/bcms_content_rotator/routes.rb +7 -0
- data/lib/bcms_content_rotator.rb +1 -0
- data/rails/init.rb +4 -0
- metadata +82 -0
data/README.markdown
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
# Content Rotator Module for BrowserCMS
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# Filters added to this controller apply to all controllers in the application.
|
2
|
+
# Likewise, all the methods added will be available for all controllers.
|
3
|
+
|
4
|
+
class ApplicationController < ActionController::Base
|
5
|
+
helper :all # include all helpers, all the time
|
6
|
+
protect_from_forgery # See ActionController::RequestForgeryProtection for details
|
7
|
+
|
8
|
+
# Scrub sensitive parameters from your log
|
9
|
+
# filter_parameter_logging :password
|
10
|
+
end
|
data/app/models/slide.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
class ContentRotatorPortlet < Portlet
|
2
|
+
|
3
|
+
# Mark this as 'true' to allow the portlet's template to be editable via the CMS admin UI.
|
4
|
+
enable_template_editor true
|
5
|
+
|
6
|
+
def render
|
7
|
+
|
8
|
+
# Collect the list of slide_ids
|
9
|
+
@slide_ids = []
|
10
|
+
(1..5).each do |i|
|
11
|
+
s_id = self.send("slide_#{i}_id")
|
12
|
+
@slide_ids << s_id.to_i if (s_id && !s_id.empty?)
|
13
|
+
end
|
14
|
+
|
15
|
+
unsorted_slides = Slide.find(@slide_ids)
|
16
|
+
|
17
|
+
# Sort slides into explicit order based on slide_ids
|
18
|
+
@slides = []
|
19
|
+
@slide_ids.each do |id|
|
20
|
+
@slides << unsorted_slides.select{|item| item.id == id}.first
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
5
|
+
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
|
6
|
+
<title><%= page_title %></title>
|
7
|
+
<%= yield :html_head %>
|
8
|
+
</head>
|
9
|
+
<body style="margin: 0; padding: 0; text-align: center;">
|
10
|
+
<%= cms_toolbar %>
|
11
|
+
<div id="wrapper" style="width: 700px; margin: 0 auto; text-align: left; padding: 30px">
|
12
|
+
Breadcrumbs: <%= render_breadcrumbs %>
|
13
|
+
Main Menu: <%= render_menu %>
|
14
|
+
<h1><%= page_title %></h1>
|
15
|
+
<%= container :main %>
|
16
|
+
</div>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<% @slides = Slide.all %>
|
2
|
+
<%= f.cms_text_field :name %>
|
3
|
+
<%= f.cms_drop_down :slide_1_id, @slides.map{|c| [c.name, c.id.to_s]}, :label=>"Slide 1", :include_blank=>"[No slide selected]" %>
|
4
|
+
<%= f.cms_drop_down :slide_2_id, @slides.map{|c| [c.name, c.id.to_s]}, :label=>"Slide 2", :include_blank=>"[No slide selected]" %>
|
5
|
+
<%= f.cms_drop_down :slide_3_id, @slides.map{|c| [c.name, c.id.to_s]}, :label=>"Slide 3", :include_blank=>"[No slide selected]" %>
|
6
|
+
<%= f.cms_drop_down :slide_4_id, @slides.map{|c| [c.name, c.id.to_s]}, :label=>"Slide 4", :include_blank=>"[No slide selected]" %>
|
7
|
+
<%= f.cms_drop_down :slide_5_id, @slides.map{|c| [c.name, c.id.to_s]}, :label=>"Slide 5", :include_blank=>"[No slide selected]" %>
|
8
|
+
<%= f.cms_check_box :autorotate, :label => "Automatically rotate" %>
|
9
|
+
<%= f.cms_text_field :rotate_interval, :label => "Rotation delay", :instructions => "in seconds (has no effect if autorotate is off)" %>
|
10
|
+
<%= f.cms_template_editor :template %>
|
@@ -0,0 +1,64 @@
|
|
1
|
+
<script type="text/javascript">
|
2
|
+
//<![CDATA[
|
3
|
+
$(function() {
|
4
|
+
var slides = $('#slides div.slide'),
|
5
|
+
currentItem = 0,
|
6
|
+
rotateInterval = <%= @portlet.rotate_interval.to_i %> * 1000,
|
7
|
+
autorotate = <%= @portlet.autorotate %>,
|
8
|
+
|
9
|
+
|
10
|
+
runSlideShow = function() {
|
11
|
+
var item = $('#slides ul#controls li a:eq('+currentItem+')');
|
12
|
+
if (item.length) {
|
13
|
+
item.trigger('click', ['timer']);
|
14
|
+
currentItem++;
|
15
|
+
} else {
|
16
|
+
currentItem = 0;
|
17
|
+
}
|
18
|
+
},
|
19
|
+
|
20
|
+
selectSlide = function(e) {
|
21
|
+
if ($(this).parent().hasClass('on')) {
|
22
|
+
return false;
|
23
|
+
} else {
|
24
|
+
$('#slides ul#controls li').removeClass('on');
|
25
|
+
$(this).parent().addClass('on');
|
26
|
+
slides.hide();
|
27
|
+
slides.filter(this.hash).show();
|
28
|
+
return false;
|
29
|
+
}
|
30
|
+
};
|
31
|
+
|
32
|
+
slides.hide();
|
33
|
+
slides.filter(':first').show();
|
34
|
+
$('#slides #controls li').filter(':first').addClass('on');
|
35
|
+
$('#slides ul#controls li a').bind('click', {}, selectSlide).
|
36
|
+
each(function(i) { this.slideIndex=i; });
|
37
|
+
|
38
|
+
if (autorotate) {
|
39
|
+
setInterval(runSlideShow, (rotateInterval < 1000 ? 1000 : rotateInterval));
|
40
|
+
}
|
41
|
+
});
|
42
|
+
//]]>
|
43
|
+
</script>
|
44
|
+
|
45
|
+
<div id="slides">
|
46
|
+
<ul id="controls">
|
47
|
+
<% @slides.each_with_index do |slide, i| %>
|
48
|
+
<li><a href="#slide-<%= i %>"><%= h slide.name %></a></li>
|
49
|
+
<% end %>
|
50
|
+
</ul>
|
51
|
+
<% @slides.each_with_index do |slide, i| %>
|
52
|
+
<div id="slide-<%= i %>" class="slide">
|
53
|
+
<div class="info">
|
54
|
+
<div class="pad">
|
55
|
+
<h3><%= h slide.name %></h3>
|
56
|
+
<%= slide.description %>
|
57
|
+
</div>
|
58
|
+
</div>
|
59
|
+
<% unless slide.image_url.blank? %>
|
60
|
+
<%= image_tag slide.image_url, :alt => h(slide.alt_text) %>
|
61
|
+
<% end %>
|
62
|
+
</div>
|
63
|
+
<% end %>
|
64
|
+
</div>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class CreateSlides < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_content_table :slides do |t|
|
4
|
+
t.string :name
|
5
|
+
t.string :image_url
|
6
|
+
t.string :alt_text
|
7
|
+
t.text :description
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
ContentType.create!(:name => "Slide", :group_name => "Content Rotator")
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.down
|
15
|
+
ContentType.delete_all(['name = ?', 'Slide'])
|
16
|
+
CategoryType.all(:conditions => ['name = ?', 'Slide']).each(&:destroy)
|
17
|
+
#If you aren't creating a versioned table, be sure to comment this out.
|
18
|
+
drop_table :slide_versions
|
19
|
+
drop_table :slides
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'bcms_content_rotator/routes'
|
data/rails/init.rb
ADDED
metadata
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bcms_content_rotator
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 23
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
version: 1.0.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- BrowserMedia
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-11-17 00:00:00 -06:00
|
19
|
+
default_executable:
|
20
|
+
dependencies: []
|
21
|
+
|
22
|
+
description:
|
23
|
+
email: github@browsermedia.com
|
24
|
+
executables: []
|
25
|
+
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files:
|
29
|
+
- README.markdown
|
30
|
+
files:
|
31
|
+
- app/controllers/application_controller.rb
|
32
|
+
- app/controllers/cms/slides_controller.rb
|
33
|
+
- app/helpers/application_helper.rb
|
34
|
+
- app/models/slide.rb
|
35
|
+
- app/portlets/content_rotator_portlet.rb
|
36
|
+
- app/portlets/helpers/content_rotator_portlet_helper.rb
|
37
|
+
- app/views/cms/slides/_form.html.erb
|
38
|
+
- app/views/cms/slides/render.html.erb
|
39
|
+
- app/views/layouts/templates/default.html.erb
|
40
|
+
- app/views/portlets/content_rotator/_form.html.erb
|
41
|
+
- app/views/portlets/content_rotator/render.html.erb
|
42
|
+
- db/migrate/20101111030324_create_slides.rb
|
43
|
+
- lib/bcms_content_rotator.rb
|
44
|
+
- lib/bcms_content_rotator/routes.rb
|
45
|
+
- rails/init.rb
|
46
|
+
- README.markdown
|
47
|
+
has_rdoc: true
|
48
|
+
homepage: http://www.browsercms.org
|
49
|
+
licenses: []
|
50
|
+
|
51
|
+
post_install_message:
|
52
|
+
rdoc_options: []
|
53
|
+
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 3
|
62
|
+
segments:
|
63
|
+
- 0
|
64
|
+
version: "0"
|
65
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
hash: 3
|
71
|
+
segments:
|
72
|
+
- 0
|
73
|
+
version: "0"
|
74
|
+
requirements: []
|
75
|
+
|
76
|
+
rubyforge_project: bcms_content_rotator
|
77
|
+
rubygems_version: 1.3.7
|
78
|
+
signing_key:
|
79
|
+
specification_version: 3
|
80
|
+
summary: A Content Rotator Module for BrowserCMS
|
81
|
+
test_files: []
|
82
|
+
|