refinerycms-events 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/app/controllers/admin/events_controller.rb +5 -0
- data/app/controllers/events_controller.rb +26 -0
- data/app/helpers/calendars_helper.rb +59 -0
- data/app/models/calendar.rb +16 -0
- data/app/models/event.rb +28 -0
- data/app/views/admin/events/_event.html.erb +17 -0
- data/app/views/admin/events/_form.html.erb +41 -0
- data/app/views/admin/events/_sortable_list.html.erb +2 -0
- data/app/views/admin/events/edit.html.erb +1 -0
- data/app/views/admin/events/index.html.erb +36 -0
- data/app/views/admin/events/new.html.erb +1 -0
- data/app/views/events/_event_list.html.erb +20 -0
- data/app/views/events/index.html.erb +10 -0
- data/app/views/events/show.html.erb +30 -0
- data/bin/refinerycms-events-install +42 -0
- data/config/routes.rb +7 -0
- data/db/migrate/20100430163757_create_events.rb +46 -0
- data/db/migrate/20100501234548_add_color_to_events.rb +9 -0
- data/db/migrate/20100502004451_add_all_day_to_events.rb +9 -0
- data/public/javascripts/event_calendar.js +49 -0
- data/public/stylesheets/event_calendar.css +233 -0
- data/rails/init.rb +10 -0
- metadata +95 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
class EventsController < ApplicationController
|
2
|
+
|
3
|
+
before_filter :find_page
|
4
|
+
helper :calendars
|
5
|
+
|
6
|
+
def index
|
7
|
+
@date = Date.parse(params[:date]) rescue Date.today
|
8
|
+
@calendar = Calendar.new(@date)
|
9
|
+
present(@page)
|
10
|
+
end
|
11
|
+
|
12
|
+
def show
|
13
|
+
@event = Event.find(params[:id])
|
14
|
+
|
15
|
+
# you can use meta fields from your model instead (e.g. browser_title)
|
16
|
+
# by swapping @page for @event in the line below:
|
17
|
+
present(@event)
|
18
|
+
end
|
19
|
+
|
20
|
+
protected
|
21
|
+
|
22
|
+
def find_page
|
23
|
+
@page = Page.find_by_link_url("/events")
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module CalendarsHelper
|
2
|
+
def datetime(d)
|
3
|
+
I18n.localize(d, :format => "%B %d, %Y %l:%M %p")
|
4
|
+
end
|
5
|
+
|
6
|
+
def date(d)
|
7
|
+
I18n.localize(d, :format => "%B %d, %Y")
|
8
|
+
end
|
9
|
+
|
10
|
+
def time(d)
|
11
|
+
I18n.localize(d, :format => "%l:%M%p")
|
12
|
+
end
|
13
|
+
|
14
|
+
def month_link(date)
|
15
|
+
link_to(I18n.localize(date, :format => "%B"), {:date => date})
|
16
|
+
end
|
17
|
+
|
18
|
+
# custom options for this calendar
|
19
|
+
def event_calendar_opts(calendar)
|
20
|
+
{
|
21
|
+
:year => @calendar.year,
|
22
|
+
:month => @calendar.month,
|
23
|
+
:event_strips => @calendar.event_strips,
|
24
|
+
:month_name_text => I18n.localize(@calendar.date, :format => "%B %Y"),
|
25
|
+
:previous_month_text => month_link(@calendar.date.last_month),
|
26
|
+
:next_month_text => month_link(@calendar.date.next_month),
|
27
|
+
:use_all_day => true
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def timed_title(event)
|
32
|
+
"#{time(event.start_at)} #{h(event.title)}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def event_title(event)
|
36
|
+
if event.all_day?
|
37
|
+
h(event.title)
|
38
|
+
else
|
39
|
+
timed_title(event)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def event_calendar(calendar)
|
44
|
+
# args is an argument hash containing :event, :day, and :options
|
45
|
+
calendar event_calendar_opts(calendar) do |args|
|
46
|
+
event = args[:event]
|
47
|
+
title = event.all_day?? h(event.title) : timed_title(event)
|
48
|
+
link_to(title, event_path(event))
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def event_list
|
53
|
+
grouped_events = Event.
|
54
|
+
all(:limit => 10, :order => 'start_at ASC',
|
55
|
+
:conditions => [ 'start_at >= ?', Time.now ]).
|
56
|
+
group_by { |e| e.start_at.to_date }
|
57
|
+
render :partial => '/events/event_list', :object => grouped_events
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Calendar
|
2
|
+
def initialize(date)
|
3
|
+
@date = date
|
4
|
+
end
|
5
|
+
|
6
|
+
def events
|
7
|
+
event_strips.flatten.compact
|
8
|
+
end
|
9
|
+
|
10
|
+
def event_strips
|
11
|
+
Event.event_strips_for_month(@date)
|
12
|
+
end
|
13
|
+
|
14
|
+
attr_reader :date
|
15
|
+
delegate :month, :year, :to => :date
|
16
|
+
end
|
data/app/models/event.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'semanticgap_date_time_form'
|
2
|
+
|
3
|
+
class Event < ActiveRecord::Base
|
4
|
+
has_event_calendar
|
5
|
+
datetime_fields_for :start_at
|
6
|
+
datetime_fields_for :end_at
|
7
|
+
|
8
|
+
acts_as_indexed :fields => [:title, :description, :location],
|
9
|
+
:index_file => [Rails.root.to_s, "tmp", "index"]
|
10
|
+
|
11
|
+
validates_presence_of :title
|
12
|
+
validates_uniqueness_of :title
|
13
|
+
|
14
|
+
validates_format_of :color, :with => /(black|white|gr[ae]y|red|yellow|green|cyan|blue|magenta|\#[A-Fa-f0-9]{3,6})/, :allow_blank => true
|
15
|
+
|
16
|
+
def dated_title
|
17
|
+
"#{I18n.localize(start_at.to_date)}: #{title}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def timed_title
|
21
|
+
"#{I18n.localize(start_at, "")}: #{title}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def color
|
25
|
+
c = attributes['color']
|
26
|
+
c.blank?? 'black' : c
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<li class='clearfix record <%= cycle("on", "on-hover") %>' id="<%= dom_id(event) -%>">
|
2
|
+
<span class='title'>
|
3
|
+
<%= date(event.start_at) %>: <%=h event.title %>
|
4
|
+
<span class="preview"> </span>
|
5
|
+
|
6
|
+
<span class='actions'>
|
7
|
+
<%= link_to refinery_icon_tag("application_go.png"), event_url(event),
|
8
|
+
:title => 'View this event<br/><em>Opens in a new window</em>',
|
9
|
+
:target => "_blank" %>
|
10
|
+
<%= link_to refinery_icon_tag("application_edit.png"), edit_admin_event_path(event),
|
11
|
+
:title => 'Edit this event' %>
|
12
|
+
<%= link_to refinery_icon_tag("delete.png"), admin_event_path(event),
|
13
|
+
:class => "cancel confirm-delete",
|
14
|
+
:title => 'Remove this event forever' %>
|
15
|
+
</span>
|
16
|
+
</span>
|
17
|
+
</li>
|
@@ -0,0 +1,41 @@
|
|
1
|
+
<% content_for :head, stylesheet_link_tag('semanticgap_date_time_form') %>
|
2
|
+
<%= error_messages_for :event -%>
|
3
|
+
<% form_for [:admin, @event] do |f| -%>
|
4
|
+
|
5
|
+
<div class='field'>
|
6
|
+
<%= f.label :title -%>
|
7
|
+
<%= f.text_field :title, :class => 'larger' -%>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<div class='field'>
|
11
|
+
<%= f.label :description -%>
|
12
|
+
<%= f.text_area :description, :rows => 20, :cols => 140, :class => 'wymeditor' -%>
|
13
|
+
</div>
|
14
|
+
|
15
|
+
<div class='field'>
|
16
|
+
<%= f.label :location -%>
|
17
|
+
<%= f.text_field :location -%>
|
18
|
+
</div>
|
19
|
+
|
20
|
+
<div class='field'>
|
21
|
+
<%= f.label :all_day -%>
|
22
|
+
<%= f.check_box :all_day -%>
|
23
|
+
</div>
|
24
|
+
|
25
|
+
<div class='field'>
|
26
|
+
<%= f.label :start_at -%>
|
27
|
+
<%= f.datetime_form :start_at -%>
|
28
|
+
</div>
|
29
|
+
|
30
|
+
<div class='field'>
|
31
|
+
<%= f.label :end_at -%>
|
32
|
+
<%= f.datetime_form :end_at -%>
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<div class='field'>
|
36
|
+
<%= f.label :color -%>
|
37
|
+
<%= f.text_field :color -%>
|
38
|
+
</div>
|
39
|
+
|
40
|
+
<%= render :partial => "/shared/admin/form_actions", :locals => {:f => f, :continue_editing => false} %>
|
41
|
+
<% end -%>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render :partial => "form" %>
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<div id='actions'>
|
2
|
+
<ul>
|
3
|
+
<li>
|
4
|
+
<%= render :partial => "/shared/admin/search", :locals => {:url => admin_events_url} %>
|
5
|
+
</li>
|
6
|
+
<li>
|
7
|
+
<%= link_to "Create New Event", new_admin_event_url, :class => "add_icon" %>
|
8
|
+
</li>
|
9
|
+
</ul>
|
10
|
+
</div>
|
11
|
+
<div id='records'>
|
12
|
+
<% if searching? %>
|
13
|
+
<h2>Search Results for "<%= params[:search] %>"</h2>
|
14
|
+
<% if @events.any? %>
|
15
|
+
<%= render :partial => "event", :collection => @events %>
|
16
|
+
<% else %>
|
17
|
+
<p>Sorry, no results found.</p>
|
18
|
+
<% end %>
|
19
|
+
<% else %>
|
20
|
+
<% if @events.any? %>
|
21
|
+
<%= will_paginate @events, :previous_label => '«', :next_label => '»' %>
|
22
|
+
<ul id='sortable_list'>
|
23
|
+
<%= render :partial => "sortable_list" %>
|
24
|
+
</ul>
|
25
|
+
<%= will_paginate @events, :previous_label => '«', :next_label => '»' %>
|
26
|
+
<% else %>
|
27
|
+
<p>
|
28
|
+
<strong>
|
29
|
+
There are no events yet.
|
30
|
+
Click "Create New Event" to add your first event.
|
31
|
+
</strong>
|
32
|
+
</p>
|
33
|
+
<% end %>
|
34
|
+
<% end %>
|
35
|
+
</div>
|
36
|
+
<%= render :partial => "/shared/admin/make_sortable", :locals => {:tree => false } if !searching? and Event.count > 1 %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render :partial => "form" %>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<dl class="event-list">
|
2
|
+
<% event_list.each do |d, events| -%>
|
3
|
+
<dt><%= date(d) %></dt>
|
4
|
+
<dd>
|
5
|
+
<ul>
|
6
|
+
<% events.each do |e| -%>
|
7
|
+
<li class="event">
|
8
|
+
<%= link_to(event_title(e), event_path(e)) %>
|
9
|
+
<% unless e.location.blank? -%>
|
10
|
+
@ <%= h(e.location) %>
|
11
|
+
<% end -%>
|
12
|
+
</li>
|
13
|
+
<% end -%>
|
14
|
+
</ul>
|
15
|
+
<% end -%>
|
16
|
+
</dd>
|
17
|
+
<dt>
|
18
|
+
<%= link_to 'View the calendar', events_path %>
|
19
|
+
</dt>
|
20
|
+
</dl>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<!-- Probably move the stylesheet to you layout. Also make sure you include the javascript. -->
|
2
|
+
<%= stylesheet_link_tag "event_calendar" %>
|
3
|
+
<%= javascript_include_tag "event_calendar" %>
|
4
|
+
|
5
|
+
<div class="page">
|
6
|
+
<%= render :partial => "/shared/content_page" %>
|
7
|
+
</div>
|
8
|
+
<div class="calendar">
|
9
|
+
<%= event_calendar(@calendar) %>
|
10
|
+
</div>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<% content_for :body_content_title do %>
|
2
|
+
<%= @event.title %>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<% content_for :body_content_left do %>
|
6
|
+
<div>
|
7
|
+
<%= @event.description %>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<div>
|
11
|
+
<h3>Where</h3>
|
12
|
+
<%= @event.location %>
|
13
|
+
</div>
|
14
|
+
|
15
|
+
<div>
|
16
|
+
<h3>When</h3>
|
17
|
+
<% if @event.all_day? -%>
|
18
|
+
<% if @event.days == 0 -%>
|
19
|
+
<%= date(@event.start_at) %>
|
20
|
+
<% else -%>
|
21
|
+
<%= date(@event.start_at) %> — <%= date(@event.end_at) %>
|
22
|
+
<% end -%>
|
23
|
+
<% else -%>
|
24
|
+
<%= datetime(@event.start_at) %> — <%= datetime(@event.end_at) %>
|
25
|
+
<% end -%>
|
26
|
+
</div>
|
27
|
+
|
28
|
+
<% end %>
|
29
|
+
|
30
|
+
<%= render :partial => "/shared/content_page" %>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'pathname'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
events_root = Pathname.new(File.expand_path(File.dirname(__FILE__) << "/.."))
|
6
|
+
|
7
|
+
rails_root = if defined?(Rails.root)
|
8
|
+
Rails.root
|
9
|
+
elsif defined?(RAILS_ROOT)
|
10
|
+
Pathname.new(RAILS_ROOT)
|
11
|
+
else
|
12
|
+
Pathname.new(ARGV.first)
|
13
|
+
end
|
14
|
+
|
15
|
+
if rails_root.exist?
|
16
|
+
[%w(db migrate), %w(public stylesheets), %w(public javascripts)].each do |dir|
|
17
|
+
rails_root.join(dir.join(File::SEPARATOR)).mkpath
|
18
|
+
end
|
19
|
+
|
20
|
+
copies = [
|
21
|
+
{:from => %w(db migrate), :to => %w(db migrate), :filename => "20100430163757_create_events.rb"},
|
22
|
+
{:from => %w(db migrate),:to => %w(db migrate), :filename => "20100501234548_add_color_to_events.rb"},
|
23
|
+
{:from => %w(db migrate),:to => %w(db migrate), :filename => "20100502004451_add_all_day_to_events.rb"},
|
24
|
+
{:from => %w(public javascripts),:to => %w(public javascripts), :filename => "event_calendar.js"},
|
25
|
+
{:from => %w(public stylesheets),:to => %w(public stylesheets), :filename => "event_calendar.css"},
|
26
|
+
]
|
27
|
+
copies.each do |copy|
|
28
|
+
copy_from = events_root.join(copy[:from].join(File::SEPARATOR), copy[:filename])
|
29
|
+
copy_to = rails_root.join(copy[:to].join(File::SEPARATOR), copy[:filename])
|
30
|
+
unless copy_to.exist?
|
31
|
+
FileUtils::copy_file copy_from.to_s, copy_to.to_s
|
32
|
+
else
|
33
|
+
puts "'#{File.join copy[:to], copy[:filename]}' already existed in your application so your existing file was not overwritten."
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
puts "---------"
|
38
|
+
puts "Copied all refinerycms-events files."
|
39
|
+
puts "Now, run rake db:migrate"
|
40
|
+
else
|
41
|
+
puts "Please specify the path of the project that you want to use the events with, i.e. refinerycms-events-install /path/to/project"
|
42
|
+
end
|
data/config/routes.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
class CreateEvents < ActiveRecord::Migration
|
2
|
+
|
3
|
+
def self.up
|
4
|
+
create_table :events do |t|
|
5
|
+
t.string :title
|
6
|
+
t.text :description
|
7
|
+
t.string :location
|
8
|
+
t.datetime :start_at
|
9
|
+
t.datetime :end_at
|
10
|
+
t.integer :position
|
11
|
+
|
12
|
+
t.timestamps
|
13
|
+
end
|
14
|
+
|
15
|
+
add_index :events, :id
|
16
|
+
|
17
|
+
User.find(:all).each do |user|
|
18
|
+
user.plugins.create(:title => "Events", :position => (user.plugins.maximum(:position) || -1) +1)
|
19
|
+
end
|
20
|
+
|
21
|
+
page = Page.create(
|
22
|
+
:title => "Events",
|
23
|
+
:link_url => "/events",
|
24
|
+
:deletable => false,
|
25
|
+
:position => ((Page.maximum(:position, :conditions => "parent_id IS NULL") || -1)+1),
|
26
|
+
:menu_match => "^/events(\/|\/.+?|)$"
|
27
|
+
)
|
28
|
+
RefinerySetting.find_or_set(:default_page_parts, ["Body", "Side Body"]).each do |default_page_part|
|
29
|
+
page.parts.create(:title => default_page_part, :body => nil)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.down
|
34
|
+
UserPlugin.destroy_all({:title => "Events"})
|
35
|
+
|
36
|
+
Page.find_all_by_link_url("/events").each do |page|
|
37
|
+
page.link_url, page.menu_match = nil
|
38
|
+
page.deletable = true
|
39
|
+
page.destroy
|
40
|
+
end
|
41
|
+
Page.destroy_all({:link_url => "/events"})
|
42
|
+
|
43
|
+
drop_table :events
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
/*
|
2
|
+
* Smart event highlighting
|
3
|
+
* Handles for when events span rows, or don't have a background color
|
4
|
+
*/
|
5
|
+
Event.observe(window, "load", function() {
|
6
|
+
var highlight_color = "#2EAC6A";
|
7
|
+
|
8
|
+
// highlight events that have a background color
|
9
|
+
$$(".ec-event-bg").each(function(ele) {
|
10
|
+
ele.observe("mouseover", function(evt) {
|
11
|
+
event_id = ele.readAttribute("data-event-id");
|
12
|
+
$$(".ec-event-"+event_id).each(function(el) {
|
13
|
+
el.setStyle({ backgroundColor: highlight_color });
|
14
|
+
});
|
15
|
+
});
|
16
|
+
ele.observe("mouseout", function(evt) {
|
17
|
+
event_color = ele.readAttribute("data-color");
|
18
|
+
event_id = ele.readAttribute("data-event-id");
|
19
|
+
$$(".ec-event-"+event_id).each(function(el) {
|
20
|
+
el.setStyle({ backgroundColor: event_color });
|
21
|
+
});
|
22
|
+
});
|
23
|
+
});
|
24
|
+
|
25
|
+
// highlight events that don't have a background color
|
26
|
+
$$(".ec-event-no-bg").each(function(ele) {
|
27
|
+
ele.observe("mouseover", function(evt) {
|
28
|
+
ele.setStyle({ color: "white" });
|
29
|
+
ele.select("a").each(function(link) {
|
30
|
+
link.setStyle({ color: "white" });
|
31
|
+
});
|
32
|
+
ele.select(".ec-bullet").each(function(bullet) {
|
33
|
+
bullet.setStyle({ backgroundColor: "white" });
|
34
|
+
});
|
35
|
+
ele.setStyle({ backgroundColor: highlight_color });
|
36
|
+
});
|
37
|
+
ele.observe("mouseout", function(evt) {
|
38
|
+
event_color = ele.readAttribute("data-color");
|
39
|
+
ele.setStyle({ color: event_color });
|
40
|
+
ele.select("a").each(function(link) {
|
41
|
+
link.setStyle({ color: event_color });
|
42
|
+
});
|
43
|
+
ele.select(".ec-bullet").each(function(bullet) {
|
44
|
+
bullet.setStyle({ backgroundColor: event_color });
|
45
|
+
});
|
46
|
+
ele.setStyle({ backgroundColor: "transparent" });
|
47
|
+
});
|
48
|
+
});
|
49
|
+
});
|
@@ -0,0 +1,233 @@
|
|
1
|
+
/*
|
2
|
+
Event Calendar stylesheet
|
3
|
+
|
4
|
+
Colors:
|
5
|
+
#d5d5d5 - border (gray)
|
6
|
+
#303030 - day names bg (gray)
|
7
|
+
#444 - number (gray)
|
8
|
+
#ecede2 - day header bg (light tan)
|
9
|
+
##d7d7ba - today header bg (tan)
|
10
|
+
#ffffdd - today bg light (yellow)
|
11
|
+
#777 - other month number (gray)
|
12
|
+
#efefef - other month day header (gray)
|
13
|
+
#2eac6a - hover (green)
|
14
|
+
*/
|
15
|
+
|
16
|
+
/* Outer most container */
|
17
|
+
.ec-calendar {
|
18
|
+
font-family: verdana, arial, helvetica, sans-serif;
|
19
|
+
font-size: 11px;
|
20
|
+
line-height: 14px;
|
21
|
+
margin: 0;
|
22
|
+
padding: 0;
|
23
|
+
border-bottom: 1px solid #d5d5d5;
|
24
|
+
}
|
25
|
+
|
26
|
+
/* Month name header & links */
|
27
|
+
.ec-calendar-header {
|
28
|
+
padding: 5px 0;
|
29
|
+
width: 100%;
|
30
|
+
table-layout: fixed;
|
31
|
+
}
|
32
|
+
|
33
|
+
.ec-month-name {
|
34
|
+
font-size: 16px;
|
35
|
+
font-weight: bold;
|
36
|
+
}
|
37
|
+
|
38
|
+
.ec-month-nav {
|
39
|
+
|
40
|
+
}
|
41
|
+
|
42
|
+
/* Containers */
|
43
|
+
.ec-body {
|
44
|
+
position: relative;
|
45
|
+
border-right: 1px solid #303030;
|
46
|
+
white-space: nowrap;
|
47
|
+
}
|
48
|
+
|
49
|
+
/* Day names */
|
50
|
+
.ec-day-names {
|
51
|
+
position: absolute;
|
52
|
+
top: 0;
|
53
|
+
left: 0;
|
54
|
+
width: 100%;
|
55
|
+
table-layout: fixed;
|
56
|
+
padding: 2px 0;
|
57
|
+
background: #303030;
|
58
|
+
color: white;
|
59
|
+
}
|
60
|
+
|
61
|
+
.ec-day-name {
|
62
|
+
font-weight: normal;
|
63
|
+
}
|
64
|
+
|
65
|
+
/* Rows container and Row */
|
66
|
+
.ec-rows {
|
67
|
+
position: absolute;
|
68
|
+
left: 0;
|
69
|
+
bottom: 0;
|
70
|
+
width: 100%;
|
71
|
+
background: white;
|
72
|
+
overflow: hidden;
|
73
|
+
border-right: 1px solid #d5d5d5;
|
74
|
+
}
|
75
|
+
|
76
|
+
.ec-row {
|
77
|
+
position: absolute;
|
78
|
+
left: 0;
|
79
|
+
width: 100%;
|
80
|
+
overflow: hidden;
|
81
|
+
}
|
82
|
+
|
83
|
+
/* Background */
|
84
|
+
.ec-row-bg {
|
85
|
+
position: absolute;
|
86
|
+
top: 0;
|
87
|
+
left: 0;
|
88
|
+
height: 100%;
|
89
|
+
width: 100%;
|
90
|
+
table-layout: fixed;
|
91
|
+
}
|
92
|
+
|
93
|
+
.ec-day-bg {
|
94
|
+
border-left: 1px solid #d5d5d5;
|
95
|
+
}
|
96
|
+
|
97
|
+
.ec-today-bg {
|
98
|
+
background-color: #ffffdd;
|
99
|
+
}
|
100
|
+
|
101
|
+
.ec-row-table {
|
102
|
+
position: relative;
|
103
|
+
width: 100%;
|
104
|
+
table-layout: fixed;
|
105
|
+
}
|
106
|
+
|
107
|
+
/* Day header */
|
108
|
+
.ec-day-header {
|
109
|
+
color: #444;
|
110
|
+
text-align: right;
|
111
|
+
padding: 0 5px;
|
112
|
+
line-height: 16px;
|
113
|
+
border-top: 1px solid #d5d5d5;
|
114
|
+
border-left: 1px solid #d5d5d5;
|
115
|
+
border-bottom: 1px dotted #bbbbbb;
|
116
|
+
background-color: #ecede2;
|
117
|
+
overflow: hidden;
|
118
|
+
}
|
119
|
+
|
120
|
+
a.ec-day-link {
|
121
|
+
color: #444;
|
122
|
+
}
|
123
|
+
|
124
|
+
.ec-today-header {
|
125
|
+
background-color: #d7d7ba;
|
126
|
+
}
|
127
|
+
|
128
|
+
.ec-weekend-day-header {
|
129
|
+
|
130
|
+
}
|
131
|
+
|
132
|
+
.ec-other-month-header {
|
133
|
+
background-color: #efefef;
|
134
|
+
color: #777;
|
135
|
+
}
|
136
|
+
|
137
|
+
|
138
|
+
/* Event cell and container */
|
139
|
+
.ec-event-cell {
|
140
|
+
cursor: pointer;
|
141
|
+
vertical-align: top;
|
142
|
+
padding-right: 1px;
|
143
|
+
padding-left: 2px;
|
144
|
+
}
|
145
|
+
|
146
|
+
.ec-event-cell a {
|
147
|
+
text-decoration: none;
|
148
|
+
display: block;
|
149
|
+
width: 100%;
|
150
|
+
height: 100%;
|
151
|
+
}
|
152
|
+
|
153
|
+
.ec-no-event-cell {
|
154
|
+
cursor: default;
|
155
|
+
}
|
156
|
+
|
157
|
+
.ec-event {
|
158
|
+
color: white;
|
159
|
+
padding-right: 1px;
|
160
|
+
padding-left: 11px;
|
161
|
+
-webkit-border-radius: 3px;
|
162
|
+
-khtml-border-radius: 3px;
|
163
|
+
-moz-border-radius: 3px;
|
164
|
+
overflow: hidden;
|
165
|
+
white-space: nowrap;
|
166
|
+
}
|
167
|
+
|
168
|
+
.ec-event :hover {
|
169
|
+
/* doesn't look as good as js highlighting */
|
170
|
+
/* background-color: #2eac6a; */
|
171
|
+
}
|
172
|
+
|
173
|
+
.ec-event-bg a {
|
174
|
+
color: white;
|
175
|
+
}
|
176
|
+
|
177
|
+
/* used to distinguish non-all_day events */
|
178
|
+
.ec-event-no-bg {
|
179
|
+
position: relative;
|
180
|
+
/* padding-left: 5px; */
|
181
|
+
}
|
182
|
+
|
183
|
+
.ec-event-no-bg a {
|
184
|
+
/* isn't implemented in all browsers */
|
185
|
+
color: inherit;
|
186
|
+
}
|
187
|
+
|
188
|
+
.ec-event-time {
|
189
|
+
font-size: 85%;
|
190
|
+
font-weight: bold;
|
191
|
+
padding-right: 3px;
|
192
|
+
}
|
193
|
+
|
194
|
+
|
195
|
+
/* Left and right arrows */
|
196
|
+
/* Doesn't work in IE6, use bg images instead */
|
197
|
+
.ec-left-arrow, .ec-right-arrow {
|
198
|
+
position: relative;
|
199
|
+
top: 3px;
|
200
|
+
width: 0;
|
201
|
+
height: 0;
|
202
|
+
font-size: 0;
|
203
|
+
line-height: 0;
|
204
|
+
margin-bottom: -8px;
|
205
|
+
border-top: 4px solid transparent;
|
206
|
+
border-bottom: 4px solid transparent;
|
207
|
+
}
|
208
|
+
|
209
|
+
.ec-left-arrow {
|
210
|
+
margin-left: -7px;
|
211
|
+
margin-right: auto;
|
212
|
+
border-right: 4px solid white;
|
213
|
+
}
|
214
|
+
|
215
|
+
.ec-right-arrow {
|
216
|
+
margin-left: auto;
|
217
|
+
margin-right: 3px;
|
218
|
+
border-left: 4px solid white;
|
219
|
+
}
|
220
|
+
|
221
|
+
/* remove this to not have a bullet */
|
222
|
+
/* don't look as good in ie */
|
223
|
+
.ec-bullet {
|
224
|
+
position: absolute;
|
225
|
+
top: 7px;
|
226
|
+
width: 4px;
|
227
|
+
height: 4px;
|
228
|
+
margin-left: -7px;
|
229
|
+
margin-right: auto;
|
230
|
+
-webkit-border-radius: 2px;
|
231
|
+
-khtml-border-radius: 2px;
|
232
|
+
-moz-border-radius: 2px;
|
233
|
+
}
|
data/rails/init.rb
ADDED
metadata
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: refinerycms-events
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- SemanticGap
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-05-07 00:00:00 -04:00
|
13
|
+
default_executable: refinerycms-events-install
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: nayutaya-active-form
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: elevation_event_calendar
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
version:
|
35
|
+
description: A really straightforward open source Ruby on Rails events plugin designed for integration with RefineryCMS.
|
36
|
+
email: info@semanticgap.com
|
37
|
+
executables:
|
38
|
+
- refinerycms-events-install
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files: []
|
42
|
+
|
43
|
+
files:
|
44
|
+
- db/migrate/20100430163757_create_events.rb
|
45
|
+
- db/migrate/20100501234548_add_color_to_events.rb
|
46
|
+
- db/migrate/20100502004451_add_all_day_to_events.rb
|
47
|
+
- app/models/calendar.rb
|
48
|
+
- app/models/event.rb
|
49
|
+
- app/controllers/events_controller.rb
|
50
|
+
- app/controllers/admin/events_controller.rb
|
51
|
+
- app/helpers/calendars_helper.rb
|
52
|
+
- app/views/events/index.html.erb
|
53
|
+
- app/views/events/show.html.erb
|
54
|
+
- app/views/events/_event_list.html.erb
|
55
|
+
- app/views/admin/events/_event.html.erb
|
56
|
+
- app/views/admin/events/_form.html.erb
|
57
|
+
- app/views/admin/events/_sortable_list.html.erb
|
58
|
+
- app/views/admin/events/edit.html.erb
|
59
|
+
- app/views/admin/events/index.html.erb
|
60
|
+
- app/views/admin/events/new.html.erb
|
61
|
+
- config/routes.rb
|
62
|
+
- public/stylesheets/event_calendar.css
|
63
|
+
- public/javascripts/event_calendar.js
|
64
|
+
- rails/init.rb
|
65
|
+
- bin/refinerycms-events-install
|
66
|
+
has_rdoc: true
|
67
|
+
homepage: http://github.com/semanticgap/refinerycms-events
|
68
|
+
licenses: []
|
69
|
+
|
70
|
+
post_install_message:
|
71
|
+
rdoc_options: []
|
72
|
+
|
73
|
+
require_paths:
|
74
|
+
- lib
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: "0"
|
80
|
+
version:
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: "0"
|
86
|
+
version:
|
87
|
+
requirements: []
|
88
|
+
|
89
|
+
rubyforge_project:
|
90
|
+
rubygems_version: 1.3.5
|
91
|
+
signing_key:
|
92
|
+
specification_version: 3
|
93
|
+
summary: Ruby on Rails events plugin for RefineryCMS.
|
94
|
+
test_files: []
|
95
|
+
|