tb_events 1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/README.md +58 -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 +164 -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 +50 -0
- data/app/helpers/spud/admin/calendar_events_helper.rb +2 -0
- data/app/helpers/spud/admin/calendars_helper.rb +15 -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/calendar_builder.rb +133 -0
- data/lib/spud_events/configuration.rb +10 -0
- data/lib/spud_events/engine.rb +31 -0
- data/lib/spud_events/table_builder.rb +88 -0
- data/lib/spud_events/version.rb +5 -0
- data/lib/tb_events.rb +8 -0
- metadata +258 -0
@@ -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,50 @@
|
|
1
|
+
module CalendarsHelper
|
2
|
+
|
3
|
+
def link_to_previous_calendar_month(date, url_for_options)
|
4
|
+
date = date.advance(:months => -1)
|
5
|
+
calendar = params[:calendar] ? params[:calendar] : nil
|
6
|
+
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
|
7
|
+
end
|
8
|
+
|
9
|
+
def link_to_next_calendar_month(date, url_for_options)
|
10
|
+
date = date.advance(:months => 1)
|
11
|
+
calendar = params[:calendar] ? params[:calendar] : nil
|
12
|
+
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
|
13
|
+
end
|
14
|
+
|
15
|
+
def build_calendar_for(objects, *args, &block)
|
16
|
+
raise ArgumentError, "Missing block" unless block_given?
|
17
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
18
|
+
html_options = options[:html]
|
19
|
+
builder = options[:builder] || Spud::Events::CalendarBuilder
|
20
|
+
calendar = options[:calendar] || Spud::Events::Calendar
|
21
|
+
|
22
|
+
content = with_output_buffer{block.call(builder.new(objects||[], self, calendar, options))}
|
23
|
+
self.content_tag(:table, content, html_options, false)
|
24
|
+
end
|
25
|
+
|
26
|
+
def get_calendar_options(text_for_all)
|
27
|
+
options_for_select(SpudCalendar.all.collect { |f| [f.title, f.title.gsub(/([^A-Z0-9]+)/i, "-").downcase] }.insert(0, text_for_all), @current_calendar)
|
28
|
+
end
|
29
|
+
|
30
|
+
def calendar_fore_color(backcolor)
|
31
|
+
fore_color = "ffffff"
|
32
|
+
if backcolor.length != 6
|
33
|
+
return fore_color
|
34
|
+
end
|
35
|
+
|
36
|
+
red = backcolor[0,2].hex
|
37
|
+
green = backcolor[2,2].hex
|
38
|
+
blue = backcolor[4,2].hex
|
39
|
+
|
40
|
+
perceived_brightness = Math.sqrt(red*red*0.241 + green*green*0.691 + blue*blue*0.068)
|
41
|
+
|
42
|
+
|
43
|
+
# average = (red+green+blue) / 3
|
44
|
+
if(perceived_brightness >= 130)
|
45
|
+
return "000000"
|
46
|
+
else
|
47
|
+
return fore_color
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Spud::Admin::CalendarsHelper
|
2
|
+
|
3
|
+
def link_to_previous_admin_calendar_month(date, url_for_options)
|
4
|
+
date = date.advance(:months => -1)
|
5
|
+
calendar = params[:calendar] ? params[:calendar] : nil
|
6
|
+
link_to('« Previous Month'.html_safe, spud_admin_list_spud_calendar_events_path(:month => date.month, :year => date.year, :calendar => calendar), :class => 'spud_events_calendar_link previous_calendar btn').html_safe
|
7
|
+
end
|
8
|
+
|
9
|
+
def link_to_next_admin_calendar_month(date, url_for_options)
|
10
|
+
date = date.advance(:months => 1)
|
11
|
+
calendar = params[:calendar] ? params[:calendar] : nil
|
12
|
+
link_to('Next Month »'.html_safe, spud_admin_list_spud_calendar_events_path(:month => date.month, :year => date.year, :calendar => calendar), :class => 'spud_events_calendar_link next_calendar btn').html_safe
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class SpudCalendarEvent < ActiveRecord::Base
|
2
|
+
belongs_to :spud_calendar
|
3
|
+
validates_presence_of :title, :start_at, :end_at, :spud_calendar_id
|
4
|
+
|
5
|
+
attr_accessible :title, :description, :start_at, :end_at, :all_day, :spud_calendar_id, :spud_calendar, :location, :address, :address_2, :city, :state, :zip
|
6
|
+
|
7
|
+
def self.in_month_of(month)
|
8
|
+
where(["spud_calendar_events.start_at <= ? AND spud_calendar_events.start_at >= ?", month.end_of_month, month.beginning_of_month])
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<div>
|
2
|
+
<h2><%= date.strftime("%B %Y") %></h2>
|
3
|
+
<% build_calendar_for @events, :year => date.year, :month => date.month do |t| %>
|
4
|
+
<%= raw t.head('S', 'M', 'T', 'W', 'T', 'F', 'S') %>
|
5
|
+
<% t.day do |day, tasks| %>
|
6
|
+
<%= content_tag :span, day.day, :class => (tasks.count > 0 ? "spud_events_calendar_date spud_events_calendar_date_active" : "spud_events_calendar_date") %>
|
7
|
+
<% end %>
|
8
|
+
<% end %>
|
9
|
+
</div>
|
10
|
+
|
11
|
+
<nav id="spud_events_calendar_nav">
|
12
|
+
<%= link_to_previous_calendar_month(@calendar_date, {:controller => 'spud/events/calendars', :action => :show}) %>
|
13
|
+
<%= link_to_next_calendar_month(@calendar_date, {:controller => 'spud/events/calendars', :action => :show}) %>
|
14
|
+
</nav>
|
15
|
+
|
16
|
+
<%= build_calendar_for @events, :year => date.year, :month => date.month do |t| %>
|
17
|
+
<%= raw t.head('S', 'M', 'T', 'W', 'T', 'F', 'S') %>
|
18
|
+
<%= t.day do |day, tasks| %>
|
19
|
+
<div class="spud_events_calendar_date_container">
|
20
|
+
<%= content_tag :span, day.day, :class => (tasks.count > 0 ? "spud_events_calendar_date spud_events_calendar_date_active" : "spud_events_calendar_date") %>
|
21
|
+
<% tasks.each do |task| %>
|
22
|
+
<%= link_to task.title[0,25], "#", :class => "spud_events_calendar_event_marker spud_events_calendar_event_#{task.spud_calendar_id}", :style => "background-color: \##{task.spud_calendar.color}; color:\##{calendar_fore_color(task.spud_calendar.color)};" %>
|
23
|
+
<% end %>
|
24
|
+
</div>
|
25
|
+
<% end %>
|
26
|
+
<% end %>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<p><%= link_to_next_admin_calendar_month(@calendar_date, :class => "btn") %></p>
|
2
|
+
<p><%= link_to_previous_admin_calendar_month(@calendar_date, :class => "btn") %></p>
|
3
|
+
|
4
|
+
<%= build_calendar_for @calendar_events, :year => @calendar_date.year, :month => @calendar_date.month do |t| %>
|
5
|
+
<%= raw t.head('S', 'M', 'T', 'W', 'T', 'F', 'S') %>
|
6
|
+
<%= t.day do |day, tasks| %>
|
7
|
+
<div class="spud_events_admin_calendar_date_container">
|
8
|
+
<%= content_tag :span, day.day, :class => (tasks.count > 0 ? "spud_events_admin_calendar_date spud_events_admin_calendar_date_active" : "spud_events_admin_calendar_date") %>
|
9
|
+
<% tasks.each do |task| %>
|
10
|
+
<%= link_to task.title[0,25], edit_spud_admin_calendar_event_path(task.id), :class => "spud_events_admin_calendar_event_marker spud_events_calendar_event_#{task.spud_calendar_id}", :style => "background-color: \##{task.spud_calendar.color}; color:\##{calendar_fore_color(task.spud_calendar.color)}" %>
|
11
|
+
<% end %>
|
12
|
+
</div>
|
13
|
+
<% end %>
|
14
|
+
<% end %>
|
@@ -0,0 +1,98 @@
|
|
1
|
+
<%= form_for @calendar_event, :url => path,:html=>{:class=>"form-horizontal"} do |f| %>
|
2
|
+
<%= error_messages_for(f.object) %>
|
3
|
+
<fieldset>
|
4
|
+
<legend>Details</legend>
|
5
|
+
<div class="control-group">
|
6
|
+
<%= f.label :spud_calender_id, "Calendar",:class => "control-label" %>
|
7
|
+
<div class="controls">
|
8
|
+
<%= f.select(:spud_calendar_id, options_from_collection_for_select(SpudCalendar.all, :id, :title, @calendar_event.spud_calendar_id)) %>
|
9
|
+
</div>
|
10
|
+
</div>
|
11
|
+
<div class="control-group">
|
12
|
+
<%= f.label :title,:class => "control-label" %>
|
13
|
+
<div class="controls">
|
14
|
+
<%= f.text_field :title %>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
<div class="control-group">
|
18
|
+
<%= f.label :description,:class => "control-label" %>
|
19
|
+
<div class="controls">
|
20
|
+
<%= f.text_area :description, :rows => 5 %>
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
</fieldset>
|
24
|
+
|
25
|
+
<fieldset>
|
26
|
+
<legend>Event Time</legend>
|
27
|
+
|
28
|
+
<div class="control-group">
|
29
|
+
<%= f.label :start_at, "Starts",:class => "control-label" %>
|
30
|
+
<div class="controls">
|
31
|
+
<%= f.text_field :start_at,:value => f.object.start_at.blank? ? Time.now.strftime("%Y-%m-%d %H:%M") : f.object.start_at.strftime("%Y-%m-%d %H:%M") , :class => 'spud_form_date_picker' %>
|
32
|
+
<span class="time_select">
|
33
|
+
<%= f.time_select :start_at, :ignore_date => true,:ampm => true%>
|
34
|
+
</span>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
<div class="control-group">
|
38
|
+
<%= f.label :end_at, "Ends",:class => "control-label" %>
|
39
|
+
|
40
|
+
<div class="controls">
|
41
|
+
<%= f.text_field :end_at,:value => f.object.end_at.blank? ? Time.now.strftime("%Y-%m-%d %H:%M") : f.object.end_at.strftime("%Y-%m-%d %H:%M") , :class => 'spud_form_date_picker' %>
|
42
|
+
<span class="time_select">
|
43
|
+
<%= f.time_select :end_at, :ignore_date => true,:ampm => true%>
|
44
|
+
</span>
|
45
|
+
</div>
|
46
|
+
</div>
|
47
|
+
</fieldset>
|
48
|
+
<fieldset>
|
49
|
+
<legend>Location</legend>
|
50
|
+
<div class="control-group">
|
51
|
+
<%= f.label :location,:class => "control-label" %>
|
52
|
+
<div class="controls">
|
53
|
+
<%= f.text_field :location %>
|
54
|
+
</div>
|
55
|
+
</div>
|
56
|
+
<div class="control-group">
|
57
|
+
<%= f.label :address,:class => "control-label" %>
|
58
|
+
<div class="controls">
|
59
|
+
<%= f.text_field :address %>
|
60
|
+
</div>
|
61
|
+
</div>
|
62
|
+
<div class="control-group">
|
63
|
+
<%= f.label :address_2,:class => "control-label" %>
|
64
|
+
<div class="controls">
|
65
|
+
<%= f.text_field :address_2 %>
|
66
|
+
</div>
|
67
|
+
</div>
|
68
|
+
<div class="control-group">
|
69
|
+
<%= f.label :city,:class => "control-label" %>
|
70
|
+
<div class="controls">
|
71
|
+
<%= f.text_field :city %>
|
72
|
+
</div>
|
73
|
+
</div>
|
74
|
+
<div class="control-group">
|
75
|
+
<%= f.label :state,:class => "control-label" %>
|
76
|
+
<div class="controls">
|
77
|
+
<%= f.text_field :state %>
|
78
|
+
</div>
|
79
|
+
</div>
|
80
|
+
<div class="control-group">
|
81
|
+
<%= f.label :zip,:class => "control-label" %>
|
82
|
+
<div class="controls">
|
83
|
+
<%= f.text_field :zip %>
|
84
|
+
</div>
|
85
|
+
</div>
|
86
|
+
</fieldset>
|
87
|
+
|
88
|
+
<div class="form-actions">
|
89
|
+
<%=f.submit "Create Event", :class=>"btn btn-primary"%> <%= link_to "Delete", spud_admin_calendar_event_path(@calendar_event), :method=>:delete,:class => "btn btn-danger", :confirm=>"Are you sure you want delete this event?" if !@calendar_event.new_record? %> or <%=link_to "cancel",spud_admin_list_spud_calendar_events_path,:class => "btn"%>
|
90
|
+
</div>
|
91
|
+
|
92
|
+
<% end %>
|
93
|
+
<br class="clear" />
|
94
|
+
<script type="text/javascript">
|
95
|
+
$(document).ready(function(){
|
96
|
+
spud.admin.date_picker.init();
|
97
|
+
});
|
98
|
+
</script>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render :partial => 'form', :locals => {:path => spud_admin_calendar_event_path(@calendar_event)} %>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<%=content_for :data_controls do%>
|
2
|
+
<%= link_to "New Event", new_spud_admin_calendar_event_path, :class => "btn btn-primary right" %>
|
3
|
+
<%end%>
|
4
|
+
<%=content_for :detail do%>
|
5
|
+
<h3>Calendar Events - <%= @calendar_date.strftime('%B %Y') %></h3>
|
6
|
+
|
7
|
+
<div id="spud_events_admin_calendar">
|
8
|
+
<%= render :partial => 'calendar' %>
|
9
|
+
</div>
|
10
|
+
|
11
|
+
<ul id="spud_events_admin_calendar_legend">
|
12
|
+
<%= render :partial => 'spud/admin/calendars/calendar_legend', :collection => @calendars, :as => :calendar %>
|
13
|
+
<li>
|
14
|
+
<%= link_to("New Calendar", new_spud_admin_calendar_path, :class => "btn btn-primary btn-small pull-right") %>
|
15
|
+
<br style="clear:right;"/>
|
16
|
+
</li>
|
17
|
+
</ul>
|
18
|
+
|
19
|
+
|
20
|
+
<%end%>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render :partial => 'form', :locals => {:path => spud_admin_calendar_events_path} %>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<li id="spud_events_admin_calendar_legend_<%= calendar.id %>" class="spud_events_admin_calendar_legend_item">
|
2
|
+
<%= content_tag :span, calendar.title, :style => "background-color: \##{calendar.color};color:\##{calendar_fore_color(calendar.color)}"%>
|
3
|
+
<div class="spud_events_admin_calendar_actions">
|
4
|
+
<%= link_to 'edit', edit_spud_admin_calendar_path(calendar), :class => "btn btn-mini" %>
|
5
|
+
<%= link_to 'delete', spud_admin_calendar_path(calendar), :remote => true, :confirm => "This action can't be undone. Would you like to remove the calendar \"#{calendar.title}\"?", :method => :delete, :class => 'js-spud-calendar-delete-action btn btn-mini btn-danger' %>
|
6
|
+
</div>
|
7
|
+
</li>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<%= form_for @calendar, :url => (@calendar.new_record? ? spud_admin_calendars_path : spud_admin_calendar_path(@calendar)),:html=>{:class=>"form-horizontal"} do |f| %>
|
2
|
+
<%= error_messages_for(f.object) %>
|
3
|
+
<div class="control-group">
|
4
|
+
<%= f.label :title,:class => "control-label" %>
|
5
|
+
<div class="controls">
|
6
|
+
<%= f.text_field :title %>
|
7
|
+
</div>
|
8
|
+
</div>
|
9
|
+
<div class="control-group">
|
10
|
+
<%= f.label :color,:class => "control-label" %>
|
11
|
+
<div class="controls">
|
12
|
+
<%= f.hidden_field :color %>
|
13
|
+
<div class="spud_events_admin_color_picker"></div>
|
14
|
+
</div>
|
15
|
+
</div>
|
16
|
+
<div class="form-actions">
|
17
|
+
<%=f.submit "Save", :class=>"btn btn-primary"%> or <%=link_to "cancel",spud_admin_list_spud_calendar_events_path,:class => "btn"%>
|
18
|
+
</div>
|
19
|
+
|
20
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render :partial => 'form' %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render :partial => 'form' %>
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require File.expand_path('../boot', __FILE__)
|
2
|
+
|
3
|
+
require 'rails/all'
|
4
|
+
|
5
|
+
if defined?(Bundler)
|
6
|
+
# If you precompile assets before deploying to production, use this line
|
7
|
+
Bundler.require *Rails.groups(:assets => %w(development test))
|
8
|
+
# If you want your assets lazily compiled in production, use this line
|
9
|
+
# Bundler.require(:default, :assets, Rails.env)
|
10
|
+
end
|
11
|
+
|
12
|
+
module Spud
|
13
|
+
module Events
|
14
|
+
class Application < Rails::Application
|
15
|
+
# Settings in config/environments/* take precedence over those specified here.
|
16
|
+
# Application configuration should go into files in config/initializers
|
17
|
+
# -- all .rb files in that directory are automatically loaded.
|
18
|
+
|
19
|
+
# Custom directories with classes and modules you want to be autoloadable.
|
20
|
+
# config.autoload_paths += %W(#{config.root}/extras)
|
21
|
+
|
22
|
+
# Only load the plugins named here, in the order given (default is alphabetical).
|
23
|
+
# :all can be used as a placeholder for all plugins not explicitly named.
|
24
|
+
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
|
25
|
+
|
26
|
+
# Activate observers that should always be running.
|
27
|
+
# config.active_record.observers = :cacher, :garbage_collector, :forum_observer
|
28
|
+
|
29
|
+
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
30
|
+
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
31
|
+
# config.time_zone = 'Central Time (US & Canada)'
|
32
|
+
|
33
|
+
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
34
|
+
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
35
|
+
# config.i18n.default_locale = :de
|
36
|
+
|
37
|
+
# Configure the default encoding used in templates for Ruby 1.9.
|
38
|
+
config.encoding = "utf-8"
|
39
|
+
|
40
|
+
# Configure sensitive parameters which will be filtered from the log file.
|
41
|
+
config.filter_parameters += [:password]
|
42
|
+
|
43
|
+
# Enable the asset pipeline
|
44
|
+
config.assets.enabled = true
|
45
|
+
|
46
|
+
# Version of your assets, change this if you want to expire all your assets
|
47
|
+
config.assets.version = '1.0'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|