event_calendar testing

This commit is contained in:
Harry Bomrah 2012-09-12 14:20:32 +08:00
parent c84b6a626e
commit 2d053164e8
15 changed files with 448 additions and 2 deletions

View File

@ -33,6 +33,7 @@ gem 'tinymce-rails'
gem 'therubyracer' if RUBY_PLATFORM.downcase.include?("linux") gem 'therubyracer' if RUBY_PLATFORM.downcase.include?("linux")
gem 'mongoid-encryptor', :require => 'mongoid/encryptor' gem 'mongoid-encryptor', :require => 'mongoid/encryptor'
#gem 'contacts' #gem 'contacts'
gem 'event-calendar', :require => 'event_calendar'
gem "impressionist", :require => "impressionist", :path => "vendor/impressionist" gem "impressionist", :require => "impressionist", :path => "vendor/impressionist"

View File

@ -85,6 +85,7 @@ GEM
diff-lcs (1.1.3) diff-lcs (1.1.3)
encrypted_strings (0.3.3) encrypted_strings (0.3.3)
erubis (2.7.0) erubis (2.7.0)
event-calendar (2.3.3)
exception_notification (2.5.2) exception_notification (2.5.2)
actionmailer (>= 3.0.4) actionmailer (>= 3.0.4)
execjs (1.3.0) execjs (1.3.0)
@ -282,6 +283,7 @@ DEPENDENCIES
database_cleaner database_cleaner
delorean delorean
devise (= 1.5.3) devise (= 1.5.3)
event-calendar
exception_notification exception_notification
execjs execjs
factory_girl_rails factory_girl_rails

View File

@ -0,0 +1,24 @@
module CalendarHelper
def month_link(month_date)
link_to(I18n.localize(month_date, :format => "%B"), {:month => month_date.month, :year => month_date.year})
end
# custom options for this calendar
def event_calendar_opts
{
:year => @year,
:month => @month,
:event_strips => @event_strips,
:month_name_text => I18n.localize(@shown_month, :format => "%B %Y"),
:previous_month_text => "<< " + month_link(@shown_month.prev_month),
:next_month_text => month_link(@shown_month.next_month) + " >>" }
end
def event_calendar
# args is an argument hash containing :event, :day, and :options
calendar event_calendar_opts do |args|
event = args[:event]
%(<a href="/events/#{event.id}" title="#{h(event.name)}">#{h(event.name)}</a>)
end
end
end

View File

@ -0,0 +1,37 @@
/*
* Smart event highlighting
* Handles when events span rows, or don't have a background color
*/
jQuery(document).ready(function($) {
var highlight_color = "#2EAC6A";
// highlight events that have a background color
$(".ec-event-bg").live("mouseover", function() {
event_id = $(this).attr("data-event-id");
event_class_name = $(this).attr("data-event-class");
$(".ec-"+event_class_name+"-"+event_id).css("background-color", highlight_color);
});
$(".ec-event-bg").live("mouseout", function() {
event_id = $(this).attr("data-event-id");
event_class_name = $(this).attr("data-event-class");
event_color = $(this).attr("data-color");
$(".ec-"+event_class_name+"-"+event_id).css("background-color", event_color);
});
// highlight events that don't have a background color
$(".ec-event-no-bg").live("mouseover", function() {
ele = $(this);
ele.css("color", "white");
ele.find("a").css("color", "white");
ele.find(".ec-bullet").css("background-color", "white");
ele.css("background-color", highlight_color);
});
$(".ec-event-no-bg").live("mouseout", function() {
ele = $(this);
event_color = $(this).attr("data-color");
ele.css("color", event_color);
ele.find("a").css("color", event_color);
ele.find(".ec-bullet").css("background-color", event_color);
ele.css("background-color", "transparent");
});
});

View File

@ -0,0 +1,237 @@
/*
Event Calendar stylesheet
Colors:
#d5d5d5 - border (gray)
#303030 - day names bg (gray)
#444 - number (gray)
#ecede2 - day header bg (light tan)
##d7d7ba - today header bg (tan)
#ffffdd - today bg light (yellow)
#777 - other month number (gray)
#efefef - other month day header (gray)
#2eac6a - hover (green)
*/
/* Outer most container */
.ec-calendar {
font-family: verdana, arial, helvetica, sans-serif;
font-size: 11px;
line-height: 14px;
margin: 0;
padding: 0;
border-bottom: 1px solid #d5d5d5;
}
/* Month name header & links */
.ec-calendar-header {
padding: 5px 0;
width: 100%;
table-layout: fixed;
}
.ec-month-name {
font-size: 16px;
font-weight: bold;
}
.ec-month-nav {
}
/* Containers */
.ec-body {
position: relative;
border-right: 1px solid #303030;
white-space: nowrap;
}
/* Day names */
.ec-day-names {
position: absolute;
top: 0;
left: 0;
width: 100%;
table-layout: fixed;
padding: 2px 0;
background: #303030;
color: white;
}
.ec-day-name {
font-weight: normal;
}
/* Rows container and Row */
.ec-rows {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
background: white;
overflow: hidden;
border-right: 1px solid #d5d5d5;
}
.ec-row {
position: absolute;
left: 0;
width: 100%;
overflow: hidden;
}
/* Background */
.ec-row-bg {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
table-layout: fixed;
}
.ec-day-bg {
border-left: 1px solid #d5d5d5;
}
.ec-today-bg {
background-color: #ffffdd;
}
.ec-row-table {
position: relative;
width: 100%;
table-layout: fixed;
}
/* Day header */
.ec-day-header {
color: #444;
text-align: right;
padding: 0 5px;
line-height: 16px;
border-top: 1px solid #d5d5d5;
border-left: 1px solid #d5d5d5;
border-bottom: 1px dotted #bbbbbb;
background-color: #ecede2;
overflow: hidden;
}
a.ec-day-link {
color: #444;
}
.ec-today-header {
background-color: #d7d7ba;
}
.ec-weekend-day-header {
}
.ec-other-month-header {
background-color: #efefef;
color: #777;
}
.ec-other-month-bg {
}
/* Event cell and container */
.ec-event-cell {
cursor: pointer;
vertical-align: top;
padding-right: 1px;
padding-left: 2px;
}
.ec-event-cell a {
text-decoration: none;
display: block;
width: 100%;
height: 100%;
}
.ec-no-event-cell {
cursor: default;
}
.ec-event {
color: white;
padding-right: 1px;
padding-left: 11px;
-webkit-border-radius: 3px;
-khtml-border-radius: 3px;
-moz-border-radius: 3px;
overflow: hidden;
white-space: nowrap;
}
.ec-event :hover {
/* doesn't look as good as js highlighting */
/* background-color: #2eac6a; */
}
.ec-event-bg a {
color: white;
}
/* used to distinguish non-all_day events */
.ec-event-no-bg {
position: relative;
/* padding-left: 5px; */
}
.ec-event-no-bg a {
/* isn't implemented in all browsers */
color: inherit;
}
.ec-event-time {
font-size: 85%;
font-weight: bold;
padding-right: 3px;
}
/* Left and right arrows */
/* Doesn't work in IE6, use bg images instead */
.ec-left-arrow, .ec-right-arrow {
position: relative;
top: 3px;
width: 0;
height: 0;
font-size: 0;
line-height: 0;
margin-bottom: -8px;
border-top: 4px solid transparent;
border-bottom: 4px solid transparent;
}
.ec-left-arrow {
margin-left: -7px;
margin-right: auto;
border-right: 4px solid white;
}
.ec-right-arrow {
margin-left: auto;
margin-right: 3px;
border-left: 4px solid white;
}
/* remove this to not have a bullet */
/* don't look as good in ie */
.ec-bullet {
position: absolute;
top: 7px;
width: 4px;
height: 4px;
margin-left: -7px;
margin-right: auto;
-webkit-border-radius: 2px;
-khtml-border-radius: 2px;
-moz-border-radius: 2px;
}

View File

@ -0,0 +1,99 @@
PATH
remote: .
specs:
calendar (0.0.1)
rails (~> 3.1.4)
GEM
remote: http://rubygems.org/
specs:
actionmailer (3.1.8)
actionpack (= 3.1.8)
mail (~> 2.3.3)
actionpack (3.1.8)
activemodel (= 3.1.8)
activesupport (= 3.1.8)
builder (~> 3.0.0)
erubis (~> 2.7.0)
i18n (~> 0.6)
rack (~> 1.3.6)
rack-cache (~> 1.2)
rack-mount (~> 0.8.2)
rack-test (~> 0.6.1)
sprockets (~> 2.0.4)
activemodel (3.1.8)
activesupport (= 3.1.8)
builder (~> 3.0.0)
i18n (~> 0.6)
activerecord (3.1.8)
activemodel (= 3.1.8)
activesupport (= 3.1.8)
arel (~> 2.2.3)
tzinfo (~> 0.3.29)
activeresource (3.1.8)
activemodel (= 3.1.8)
activesupport (= 3.1.8)
activesupport (3.1.8)
multi_json (>= 1.0, < 1.3)
arel (2.2.3)
builder (3.0.3)
erubis (2.7.0)
hike (1.2.1)
i18n (0.6.1)
jquery-rails (2.1.2)
railties (>= 3.1.0, < 5.0)
thor (~> 0.14)
json (1.7.5)
mail (2.3.3)
i18n (>= 0.4.0)
mime-types (~> 1.16)
treetop (~> 1.4.8)
mime-types (1.19)
multi_json (1.2.0)
polyglot (0.3.3)
rack (1.3.6)
rack-cache (1.2)
rack (>= 0.4)
rack-mount (0.8.3)
rack (>= 1.0.0)
rack-ssl (1.3.2)
rack
rack-test (0.6.1)
rack (>= 1.0)
rails (3.1.8)
actionmailer (= 3.1.8)
actionpack (= 3.1.8)
activerecord (= 3.1.8)
activeresource (= 3.1.8)
activesupport (= 3.1.8)
bundler (~> 1.0)
railties (= 3.1.8)
railties (3.1.8)
actionpack (= 3.1.8)
activesupport (= 3.1.8)
rack-ssl (~> 1.3.2)
rake (>= 0.8.7)
rdoc (~> 3.4)
thor (~> 0.14.6)
rake (0.9.2.2)
rdoc (3.12)
json (~> 1.4)
sprockets (2.0.4)
hike (~> 1.2)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
sqlite3 (1.3.6)
thor (0.14.6)
tilt (1.3.3)
treetop (1.4.10)
polyglot
polyglot (>= 0.3.1)
tzinfo (0.3.33)
PLATFORMS
ruby
DEPENDENCIES
calendar!
jquery-rails
sqlite3

View File

@ -0,0 +1,12 @@
class Panel::Orbitcalendar::BackEnd::CalendarController < ApplicationController
def index
@month = (params[:month] || (Time.zone || Time).now.month).to_i
@year = (params[:year] || (Time.zone || Time).now.year).to_i
@shown_month = Date.civil(@year, @month)
@event_strips = Event.event_strips_for_month(@shown_month)
end
end

View File

@ -0,0 +1,24 @@
module Panel::Orbitcalendar::BackEnd::CalendarHelper
def month_link(month_date)
link_to(I18n.localize(month_date, :format => "%B"), {:month => month_date.month, :year => month_date.year})
end
# custom options for this calendar
def event_calendar_opts
{
:year => @year,
:month => @month,
:event_strips => @event_strips,
:month_name_text => I18n.localize(@shown_month, :format => "%B %Y"),
:previous_month_text => "<< " + month_link(@shown_month.prev_month),
:next_month_text => month_link(@shown_month.next_month) + " >>" }
end
def event_calendar
# args is an argument hash containing :event, :day, and :options
calendar event_calendar_opts do |args|
event = args[:event]
%(<a href="/events/#{event.id}" title="#{h(event.name)}">#{h(event.name)}</a>)
end
end
end

View File

@ -0,0 +1,4 @@
class Event
include Mongoid::Document
has_event_calendar
end

View File

@ -0,0 +1,6 @@
<!-- Probably move the stylesheet to you layout. Also make sure you include the javascript. -->
<%= stylesheet_link_tag "event_calendar" %>
<h1>Calendar</h1>
<%= raw(event_calendar) %>

View File

@ -1,9 +1,9 @@
Rails.application.routes.draw do Rails.application.routes.draw do
namespace :panel do namespace :panel do
namespace :calendar do namespace :orbitcalendar do
namespace :back_end do namespace :back_end do
resources :cals match '/calendar(/:year(/:month))' => 'calendar#index', :as => :calendar, :constraints => {:year => /\d{4}/, :month => /\d{1,2}/}
resources :calendar_categories resources :calendar_categories
end end