spud_events 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +57 -0
- data/Rakefile +28 -0
- data/app/assets/images/spud/admin/events_thumb.png +0 -0
- data/app/assets/javascripts/calendar_events.js +2 -0
- data/app/assets/javascripts/calendars.js +2 -0
- data/app/assets/javascripts/spud/admin/calendar_events.js +2 -0
- data/app/assets/javascripts/spud/admin/calendars.js +0 -0
- data/app/assets/javascripts/spud/admin/events.js +51 -0
- data/app/assets/javascripts/spud/events.js +0 -0
- data/app/assets/lib/colorpicker/colorpicker.css +161 -0
- data/app/assets/lib/colorpicker/colorpicker.js +484 -0
- data/app/assets/lib/colorpicker/images/blank.gif +0 -0
- data/app/assets/lib/colorpicker/images/colorpicker_background.png +0 -0
- data/app/assets/lib/colorpicker/images/colorpicker_hex.png +0 -0
- data/app/assets/lib/colorpicker/images/colorpicker_hsb_b.png +0 -0
- data/app/assets/lib/colorpicker/images/colorpicker_hsb_h.png +0 -0
- data/app/assets/lib/colorpicker/images/colorpicker_hsb_s.png +0 -0
- data/app/assets/lib/colorpicker/images/colorpicker_indic.gif +0 -0
- data/app/assets/lib/colorpicker/images/colorpicker_overlay.png +0 -0
- data/app/assets/lib/colorpicker/images/colorpicker_rgb_b.png +0 -0
- data/app/assets/lib/colorpicker/images/colorpicker_rgb_g.png +0 -0
- data/app/assets/lib/colorpicker/images/colorpicker_rgb_r.png +0 -0
- data/app/assets/lib/colorpicker/images/colorpicker_select.gif +0 -0
- data/app/assets/lib/colorpicker/images/colorpicker_submit.png +0 -0
- data/app/assets/lib/colorpicker/images/custom_background.png +0 -0
- data/app/assets/lib/colorpicker/images/custom_hex.png +0 -0
- data/app/assets/lib/colorpicker/images/custom_hsb_b.png +0 -0
- data/app/assets/lib/colorpicker/images/custom_hsb_h.png +0 -0
- data/app/assets/lib/colorpicker/images/custom_hsb_s.png +0 -0
- data/app/assets/lib/colorpicker/images/custom_indic.gif +0 -0
- data/app/assets/lib/colorpicker/images/custom_rgb_b.png +0 -0
- data/app/assets/lib/colorpicker/images/custom_rgb_g.png +0 -0
- data/app/assets/lib/colorpicker/images/custom_rgb_r.png +0 -0
- data/app/assets/lib/colorpicker/images/custom_submit.png +0 -0
- data/app/assets/lib/colorpicker/images/select.png +0 -0
- data/app/assets/lib/colorpicker/images/select2.png +0 -0
- data/app/assets/lib/colorpicker/images/slider.png +0 -0
- data/app/assets/stylesheets/spud/admin/events.css +16 -0
- data/app/assets/stylesheets/spud/calendar_events.css +18 -0
- data/app/assets/stylesheets/spud/calendars.css +136 -0
- data/app/assets/stylesheets/spud/events.css +4 -0
- data/app/controllers/calendar_events_controller.rb +8 -0
- data/app/controllers/calendars_controller.rb +30 -0
- data/app/controllers/spud/admin/calendar_events_controller.rb +64 -0
- data/app/controllers/spud/admin/calendars_controller.rb +52 -0
- data/app/helpers/calendars_helper.rb +49 -0
- data/app/helpers/spud/admin/calendar_events_helper.rb +2 -0
- data/app/helpers/spud/admin/calendars_helper.rb +13 -0
- data/app/models/spud_calendar.rb +7 -0
- data/app/models/spud_calendar_event.rb +11 -0
- data/app/views/calendar_events/show.html.erb +5 -0
- data/app/views/calendars/_calendar.html.erb +26 -0
- data/app/views/calendars/_calendar_options.html.erb +4 -0
- data/app/views/calendars/show.html.erb +4 -0
- data/app/views/spud/admin/calendar_events/_calendar.html.erb +14 -0
- data/app/views/spud/admin/calendar_events/_form.html.erb +98 -0
- data/app/views/spud/admin/calendar_events/edit.html.erb +1 -0
- data/app/views/spud/admin/calendar_events/index.html.erb +20 -0
- data/app/views/spud/admin/calendar_events/new.html.erb +1 -0
- data/app/views/spud/admin/calendars/_calendar_legend.html.erb +7 -0
- data/app/views/spud/admin/calendars/_form.html.erb +20 -0
- data/app/views/spud/admin/calendars/edit.html.erb +1 -0
- data/app/views/spud/admin/calendars/new.html.erb +1 -0
- data/config/application.rb +50 -0
- data/config/boot.rb +6 -0
- data/config/routes.rb +17 -0
- data/db/migrate/20120216191833_create_spud_calendars.rb +12 -0
- data/db/migrate/20120216192531_create_spud_calendar_events.rb +15 -0
- data/db/migrate/20130214131628_add_location_to_spud_calendar_event.rb +10 -0
- data/lib/spud_events.rb +8 -0
- data/lib/spud_events/calendar_builder.rb +133 -0
- data/lib/spud_events/configuration.rb +10 -0
- data/lib/spud_events/engine.rb +30 -0
- data/lib/spud_events/table_builder.rb +88 -0
- data/lib/spud_events/version.rb +5 -0
- metadata +258 -0
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,16 @@
|
|
1
|
+
/* ...
|
2
|
+
*= require spud/calendars
|
3
|
+
*= require spud/calendar_events
|
4
|
+
*= require colorpicker/colorpicker
|
5
|
+
*= require_self
|
6
|
+
*/
|
7
|
+
|
8
|
+
/* Calendar Color Picker
|
9
|
+
----------------------- */
|
10
|
+
.spud_events_admin_color_picker {
|
11
|
+
height: 28px;
|
12
|
+
width: 28px;
|
13
|
+
display: block;
|
14
|
+
background-image: url('/assets/colorpicker/images/select2.png');
|
15
|
+
background-position: 50% 50%;
|
16
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
a.spud_events_admin_calendar_event_marker,
|
2
|
+
a.spud_events_calendar_event_marker {
|
3
|
+
color: black;
|
4
|
+
font-size: 11px;
|
5
|
+
padding: 0 3px;
|
6
|
+
margin: 0 0 3px 0;
|
7
|
+
line-height: 13px;
|
8
|
+
display: block;
|
9
|
+
-moz-border-radius: 3px;
|
10
|
+
-webkit-border-radius: 3px;
|
11
|
+
border-radius: 3px;
|
12
|
+
text-decoration: none;
|
13
|
+
}
|
14
|
+
span.spud_events_admin_calendar_event_marker:last-child,
|
15
|
+
span.spud_events_calendar_event_marker:last-child {
|
16
|
+
color: #191919;
|
17
|
+
margin: 0;
|
18
|
+
}
|
@@ -0,0 +1,136 @@
|
|
1
|
+
/* Calendar Tables
|
2
|
+
----------------------- */
|
3
|
+
#spud_events_admin_calendar table,
|
4
|
+
#spud_events_calendar table {
|
5
|
+
border-collapse: collapse;
|
6
|
+
font-size: 13px;
|
7
|
+
border: 1px solid #d9d9d9;;
|
8
|
+
width: 100%;
|
9
|
+
}
|
10
|
+
#spud_events_admin_calendar th,
|
11
|
+
#spud_events_calendar th {
|
12
|
+
background-image: -webkit-gradient(
|
13
|
+
linear,
|
14
|
+
left bottom,
|
15
|
+
left top,
|
16
|
+
color-stop(0, rgb(244,244,244)),
|
17
|
+
color-stop(1, rgb(255,255,255))
|
18
|
+
);
|
19
|
+
background-image: -moz-linear-gradient(
|
20
|
+
center bottom,
|
21
|
+
rgb(244,244,244) 6%,
|
22
|
+
rgb(255,255,255) 53%
|
23
|
+
);
|
24
|
+
}
|
25
|
+
#spud_events_admin_calendar td, #spud_events_admin_calendar th,
|
26
|
+
#spud_events_calendar td, #spud_events_calendar th {
|
27
|
+
padding: 0 10px;
|
28
|
+
line-height: 30px;
|
29
|
+
text-align: left;
|
30
|
+
vertical-align: middle;
|
31
|
+
}
|
32
|
+
#spud_events_admin_calendar td img, #spud_events_admin_calendar th img,
|
33
|
+
#spud_events_calendar td img, #spud_events_calendar th img {
|
34
|
+
display: block;
|
35
|
+
}
|
36
|
+
#spud_events_admin_calendar tbody tr,
|
37
|
+
#spud_events_calendar tbody tr {
|
38
|
+
border-top: 1px solid #d9d9d9;
|
39
|
+
border-bottom: 1px solid #d9d9d9;
|
40
|
+
-webkit-transition:background 0.15s ease-in;
|
41
|
+
-moz-transition:background 0.15s ease-in;
|
42
|
+
}
|
43
|
+
#spud_events_admin_calendar tbody tr:hover,
|
44
|
+
#spud_events_calendar tbody tr:hover {
|
45
|
+
background: #f0f0f0;
|
46
|
+
-webkit-transition:background 0.15s ease-in;
|
47
|
+
-moz-transition:background 0.15s ease-in;
|
48
|
+
}
|
49
|
+
|
50
|
+
#spud_events_admin_calendar,
|
51
|
+
#spud_events_calendar {
|
52
|
+
width: 700px;
|
53
|
+
padding-bottom: 50px;
|
54
|
+
position: relative;
|
55
|
+
float: left;
|
56
|
+
}
|
57
|
+
#spud_events_calendar {
|
58
|
+
width: auto;
|
59
|
+
}
|
60
|
+
#spud_events_admin_calendar p:first-child,
|
61
|
+
#spud_events_calendar p:first-child {
|
62
|
+
float: right;
|
63
|
+
}
|
64
|
+
#spud_events_admin_calendar table,
|
65
|
+
#spud_events_calendar table {
|
66
|
+
margin: 15px 0 0;
|
67
|
+
}
|
68
|
+
#spud_events_admin_calendar th,
|
69
|
+
#spud_events_calendar th {
|
70
|
+
text-align: center;
|
71
|
+
}
|
72
|
+
#spud_events_admin_calendar td,
|
73
|
+
#spud_events_calendar td {
|
74
|
+
border: 1px solid #d9d9d9;;
|
75
|
+
position: relative;
|
76
|
+
height: 90px;
|
77
|
+
padding: 0;
|
78
|
+
vertical-align: top;
|
79
|
+
width: 98px;
|
80
|
+
}
|
81
|
+
.spud_events_admin_calendar_date_container,
|
82
|
+
.spud_events_calendar_date_container {
|
83
|
+
display: block;
|
84
|
+
padding: 18px 5px 0;
|
85
|
+
position: relative;
|
86
|
+
}
|
87
|
+
span.spud_events_admin_calendar_date,
|
88
|
+
span.spud_events_calendar_date {
|
89
|
+
position: absolute;
|
90
|
+
top: 3px;
|
91
|
+
right: 3px;
|
92
|
+
font-size: 11px;
|
93
|
+
line-height: 11px;
|
94
|
+
}
|
95
|
+
|
96
|
+
/* Calendar Legend
|
97
|
+
----------------------- */
|
98
|
+
#spud_events_admin_calendar_legend,
|
99
|
+
#spud_events_calendar_legend {
|
100
|
+
list-style: none;
|
101
|
+
border: 1px solid #d9d9d9;
|
102
|
+
padding: 0;
|
103
|
+
margin: 45px 0 0 725px;
|
104
|
+
}
|
105
|
+
#spud_events_admin_calendar_legend li,
|
106
|
+
#spud_events_calendar_legend li {
|
107
|
+
display: block;
|
108
|
+
padding: 5px 5px 5px 3px;
|
109
|
+
-webkit-transition: background 0.15s ease-in;
|
110
|
+
}
|
111
|
+
#spud_events_admin_calendar_legend li:hover,
|
112
|
+
#spud_events_calendar_legend li:hover {
|
113
|
+
background: #F0F0F0;
|
114
|
+
}
|
115
|
+
#spud_events_admin_calendar_legend li,
|
116
|
+
#spud_events_calendar_legend li {
|
117
|
+
border-bottom: 1px solid #d9d9d9;
|
118
|
+
}
|
119
|
+
#spud_events_admin_calendar_legend li:last-child,
|
120
|
+
#spud_events_calendar_legend li:last-child {
|
121
|
+
border: none;
|
122
|
+
}
|
123
|
+
.spud_events_admin_calendar_actions,
|
124
|
+
.spud_events_calendar_actions {
|
125
|
+
text-align: right;
|
126
|
+
}
|
127
|
+
|
128
|
+
#spud_events_admin_calendar_legend span,
|
129
|
+
#spud_events_calendar_legend span {
|
130
|
+
display: inline-block;
|
131
|
+
-moz-border-radius: 3px;
|
132
|
+
-webkit-border-radius: 3px;
|
133
|
+
border-radius: 3px;
|
134
|
+
padding: 2px 8px;
|
135
|
+
margin: 8px 0 0 8px;
|
136
|
+
}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class CalendarsController < ApplicationController
|
2
|
+
|
3
|
+
layout Spud::Events.config.calendar_layout || 'spud/calendar'
|
4
|
+
|
5
|
+
def show
|
6
|
+
if params[:month]
|
7
|
+
year = params[:year] ? params[:year] : Time.new.year
|
8
|
+
begin
|
9
|
+
@calendar_date = Time.local(year, params[:month])
|
10
|
+
rescue
|
11
|
+
@calendar_date = default_date
|
12
|
+
end
|
13
|
+
else
|
14
|
+
@calendar_date = default_date
|
15
|
+
end
|
16
|
+
if params[:calendar] && calendar = SpudCalendar.find_by_title(params[:calendar].titleize)
|
17
|
+
@events = calendar.spud_calendar_events.where(["start_at >= ?",@calendar_date]).order(:start_at).all
|
18
|
+
else
|
19
|
+
@events = SpudCalendarEvent.where(["start_at >= ?",@calendar_date]).order(:start_at).all
|
20
|
+
end
|
21
|
+
@current_calendar = params[:calendar] ? params[:calendar] : 0
|
22
|
+
@page_title = @calendar_date.strftime("Calendar - %B %Y")
|
23
|
+
end
|
24
|
+
|
25
|
+
def default_date
|
26
|
+
tempDate = Time.new
|
27
|
+
return Time.local(tempDate.year,tempDate.month)
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
class Spud::Admin::CalendarEventsController < Spud::Admin::ApplicationController
|
2
|
+
|
3
|
+
layout 'spud/admin/detail'
|
4
|
+
add_breadcrumb "Events", :spud_admin_list_spud_calendar_events_path
|
5
|
+
belongs_to_spud_app :events
|
6
|
+
|
7
|
+
respond_to :html, :xml, :json
|
8
|
+
respond_to :js, :only => [:index, ]
|
9
|
+
|
10
|
+
def index
|
11
|
+
if params[:month]
|
12
|
+
year = params[:year] ? params[:year] : Time.new.year
|
13
|
+
begin
|
14
|
+
@calendar_date = Time.local(year, params[:month])
|
15
|
+
rescue
|
16
|
+
@calendar_date = Time.new
|
17
|
+
end
|
18
|
+
else
|
19
|
+
@calendar_date = Time.new
|
20
|
+
end
|
21
|
+
|
22
|
+
if params[:spud_calendar] && calendar = SpudCalendar.find_by_title(params[:spud_calendar].titleize)
|
23
|
+
@calendar_events = calendar.events
|
24
|
+
else
|
25
|
+
@calendar_events = SpudCalendarEvent
|
26
|
+
end
|
27
|
+
@calendar_events = @calendar_events.in_month_of(@calendar_date).order('spud_calendar_events.start_at ASC').all
|
28
|
+
|
29
|
+
@calendars = SpudCalendar.all
|
30
|
+
@current_calendar = params[:spud_calendar] ? params[:spud_calendar] : 0
|
31
|
+
|
32
|
+
respond_with(@calendars, :include => :events)
|
33
|
+
end
|
34
|
+
|
35
|
+
def new
|
36
|
+
@calendar_event = SpudCalendarEvent.new
|
37
|
+
if params[:spud_calendar]
|
38
|
+
@calendar_event.spud_calendar_id = SpudCalendar.find_by_title(params[:spud_calendar].titleize).id
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def edit
|
43
|
+
@calendar_event = SpudCalendarEvent.find(params[:id])
|
44
|
+
end
|
45
|
+
|
46
|
+
def create
|
47
|
+
@calendar_event = SpudCalendarEvent.new(params[:spud_calendar_event])
|
48
|
+
flash[:notice] = 'Calendar event was successfully created.' if @calendar_event.save
|
49
|
+
respond_with(@calendar_event, :location => spud_admin_list_spud_calendar_events_path)
|
50
|
+
end
|
51
|
+
|
52
|
+
def update
|
53
|
+
@calendar_event = SpudCalendarEvent.find(params[:id])
|
54
|
+
flash[:notice] = 'Calendar event was successfully updated.' if @calendar_event.update_attributes(params[:spud_calendar_event])
|
55
|
+
respond_with(@calendar_event, :location =>spud_admin_list_spud_calendar_events_path)
|
56
|
+
end
|
57
|
+
|
58
|
+
def destroy
|
59
|
+
@calendar_event = SpudCalendarEvent.find(params[:id])
|
60
|
+
@calendar_event.destroy
|
61
|
+
respond_with(@calendar_event, :location => spud_admin_list_spud_calendar_events_path)
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
class Spud::Admin::CalendarsController < Spud::Admin::ApplicationController
|
2
|
+
|
3
|
+
layout 'spud/admin/detail'
|
4
|
+
add_breadcrumb "Events", :spud_admin_list_spud_calendar_events_path
|
5
|
+
|
6
|
+
belongs_to_spud_app :events
|
7
|
+
|
8
|
+
respond_to :html, :xml, :json, :js
|
9
|
+
|
10
|
+
def new
|
11
|
+
@page_name = "New Calendar"
|
12
|
+
@calendar = SpudCalendar.new
|
13
|
+
respond_with(@calendar)
|
14
|
+
end
|
15
|
+
|
16
|
+
def create
|
17
|
+
@calendar = SpudCalendar.new(params[:spud_calendar])
|
18
|
+
if @calendar.save
|
19
|
+
redirect_to spud_admin_list_spud_calendar_events_path
|
20
|
+
else
|
21
|
+
render :action => "new"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def edit
|
26
|
+
@page_name = "Edit Calendar"
|
27
|
+
@calendar = SpudCalendar.find(params[:id])
|
28
|
+
respond_with(@calendar)
|
29
|
+
end
|
30
|
+
|
31
|
+
def update
|
32
|
+
@calendar = SpudCalendar.find(params[:id])
|
33
|
+
if @calendar.update_attributes(params[:spud_calendar])
|
34
|
+
flash[:notice] = 'Calendar was successfully updated.'
|
35
|
+
redirect_to spud_admin_list_spud_calendar_events_path
|
36
|
+
else
|
37
|
+
render :action => "edit"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def destroy
|
42
|
+
@calendar = SpudCalendar.find(params[:id])
|
43
|
+
@calendar.spud_calendar_events.each do |event|
|
44
|
+
event.update_attribute(:spud_calendar_id, 0)
|
45
|
+
end
|
46
|
+
@calendar.destroy
|
47
|
+
respond_with(@calendar) do |format|
|
48
|
+
format.js { render(:nothing => true) }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module CalendarsHelper
|
2
|
+
def build_calendar_for(objects, *args, &block)
|
3
|
+
raise ArgumentError, "Missing block" unless block_given?
|
4
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
5
|
+
html_options = options[:html]
|
6
|
+
builder = options[:builder] || Spud::Events::CalendarBuilder
|
7
|
+
calendar = options[:calendar] || Spud::Events::Calendar
|
8
|
+
|
9
|
+
content = with_output_buffer{block.call(builder.new(objects||[], self, calendar, options))}
|
10
|
+
self.content_tag(:table, content, html_options, false)
|
11
|
+
end
|
12
|
+
|
13
|
+
def get_calendar_options(text_for_all)
|
14
|
+
options_for_select(SpudCalendar.all.collect { |f| [f.title, f.title.gsub(/([^A-Z0-9]+)/i, "-").downcase] }.insert(0, text_for_all), @current_calendar)
|
15
|
+
end
|
16
|
+
|
17
|
+
def calendar_fore_color(backcolor)
|
18
|
+
fore_color = "ffffff"
|
19
|
+
if backcolor.length != 6
|
20
|
+
return fore_color
|
21
|
+
end
|
22
|
+
|
23
|
+
red = backcolor[0,2].hex
|
24
|
+
green = backcolor[2,2].hex
|
25
|
+
blue = backcolor[4,2].hex
|
26
|
+
|
27
|
+
perceived_brightness = Math.sqrt(red*red*0.241 + green*green*0.691 + blue*blue*0.068)
|
28
|
+
|
29
|
+
|
30
|
+
# average = (red+green+blue) / 3
|
31
|
+
if(perceived_brightness >= 130)
|
32
|
+
return "000000"
|
33
|
+
else
|
34
|
+
return fore_color
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def link_to_previous_calendar_month(date, url_for_options)
|
39
|
+
date = date.advance(:months => -1)
|
40
|
+
calendar = params[:calendar] ? params[:calendar] : nil
|
41
|
+
link_to('« Previous Month'.html_safe, calendar_path(:month => date.month, :year => date.year, :calendar => calendar), :class => 'spud_events_calendar_link previous_calendar btn').html_safe
|
42
|
+
end
|
43
|
+
|
44
|
+
def link_to_next_calendar_month(date, url_for_options)
|
45
|
+
date = date.advance(:months => 1)
|
46
|
+
calendar = params[:calendar] ? params[:calendar] : nil
|
47
|
+
link_to('Next Month »'.html_safe, calendar_path(:month => date.month, :year => date.year, :calendar => calendar), :class => 'spud_events_calendar_link next_calendar btn').html_safe
|
48
|
+
end
|
49
|
+
end
|