tb_events 1.1.0 → 1.3.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.
Files changed (83) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +13 -1
  3. data/Rakefile +2 -2
  4. data/app/assets/javascripts/admin/events/application.js +16 -0
  5. data/app/assets/javascripts/{calendar_events.js → admin/events/calendar_events.js} +0 -0
  6. data/app/assets/javascripts/{spud/admin → admin/events}/calendars.js +0 -0
  7. data/app/assets/stylesheets/admin/events/application.css +4 -0
  8. data/app/assets/{javascripts/spud/events.js → stylesheets/admin/events/calendar_events.css} +0 -0
  9. data/app/assets/stylesheets/{spud → admin/events}/calendars.css +23 -28
  10. data/app/controllers/admin/calendar_events_controller.rb +13 -15
  11. data/app/controllers/admin/calendars_controller.rb +9 -11
  12. data/app/controllers/calendar_events_controller.rb +12 -6
  13. data/app/controllers/calendars_controller.rb +18 -18
  14. data/app/helpers/admin/calendars_helper.rb +6 -8
  15. data/app/helpers/calendars_helper.rb +66 -35
  16. data/app/models/spud_calendar.rb +30 -2
  17. data/app/models/spud_calendar_event.rb +1 -18
  18. data/app/models/spud_events/calendar_event_model.rb +31 -0
  19. data/app/views/admin/calendar_events/_calendar.html.erb +16 -11
  20. data/app/views/admin/calendar_events/_form.html.erb +16 -98
  21. data/app/views/admin/calendar_events/index.html.erb +24 -16
  22. data/app/views/admin/calendars/_calendar_legend.html.erb +5 -4
  23. data/app/views/admin/calendars/_form.html.erb +4 -19
  24. data/app/views/calendar_events/index.html.erb +22 -0
  25. data/app/views/calendar_events/show.html.erb +3 -1
  26. data/app/views/calendars/show.html.erb +18 -15
  27. data/config/locales/en.yml +9 -0
  28. data/config/routes.rb +7 -10
  29. data/db/migrate/20120216191833_create_spud_calendars.rb +3 -3
  30. data/db/migrate/20120216192531_create_spud_calendar_events.rb +1 -1
  31. data/db/migrate/20130214131628_add_location_to_spud_calendar_event.rb +1 -1
  32. data/db/migrate/20140723203144_add_identifier_to_spud_calendars.rb +6 -0
  33. data/db/migrate/20140730182213_remove_color_from_spud_calendars.rb +9 -0
  34. data/lib/spud_events/calendar_builder.rb +53 -0
  35. data/lib/spud_events/configuration.rb +6 -0
  36. data/lib/spud_events/engine.rb +25 -0
  37. data/lib/spud_events/version.rb +3 -0
  38. data/lib/tb_events.rb +4 -4
  39. metadata +62 -110
  40. data/app/assets/javascripts/calendars.js +0 -2
  41. data/app/assets/javascripts/spud/admin/calendar_events.js +0 -2
  42. data/app/assets/javascripts/spud/admin/events.js +0 -51
  43. data/app/assets/lib/colorpicker/colorpicker.css +0 -164
  44. data/app/assets/lib/colorpicker/colorpicker.js +0 -484
  45. data/app/assets/lib/colorpicker/images/blank.gif +0 -0
  46. data/app/assets/lib/colorpicker/images/colorpicker_background.png +0 -0
  47. data/app/assets/lib/colorpicker/images/colorpicker_hex.png +0 -0
  48. data/app/assets/lib/colorpicker/images/colorpicker_hsb_b.png +0 -0
  49. data/app/assets/lib/colorpicker/images/colorpicker_hsb_h.png +0 -0
  50. data/app/assets/lib/colorpicker/images/colorpicker_hsb_s.png +0 -0
  51. data/app/assets/lib/colorpicker/images/colorpicker_indic.gif +0 -0
  52. data/app/assets/lib/colorpicker/images/colorpicker_overlay.png +0 -0
  53. data/app/assets/lib/colorpicker/images/colorpicker_rgb_b.png +0 -0
  54. data/app/assets/lib/colorpicker/images/colorpicker_rgb_g.png +0 -0
  55. data/app/assets/lib/colorpicker/images/colorpicker_rgb_r.png +0 -0
  56. data/app/assets/lib/colorpicker/images/colorpicker_select.gif +0 -0
  57. data/app/assets/lib/colorpicker/images/colorpicker_submit.png +0 -0
  58. data/app/assets/lib/colorpicker/images/custom_background.png +0 -0
  59. data/app/assets/lib/colorpicker/images/custom_hex.png +0 -0
  60. data/app/assets/lib/colorpicker/images/custom_hsb_b.png +0 -0
  61. data/app/assets/lib/colorpicker/images/custom_hsb_h.png +0 -0
  62. data/app/assets/lib/colorpicker/images/custom_hsb_s.png +0 -0
  63. data/app/assets/lib/colorpicker/images/custom_indic.gif +0 -0
  64. data/app/assets/lib/colorpicker/images/custom_rgb_b.png +0 -0
  65. data/app/assets/lib/colorpicker/images/custom_rgb_g.png +0 -0
  66. data/app/assets/lib/colorpicker/images/custom_rgb_r.png +0 -0
  67. data/app/assets/lib/colorpicker/images/custom_submit.png +0 -0
  68. data/app/assets/lib/colorpicker/images/select.png +0 -0
  69. data/app/assets/lib/colorpicker/images/select2.png +0 -0
  70. data/app/assets/lib/colorpicker/images/slider.png +0 -0
  71. data/app/assets/stylesheets/spud/admin/events.css +0 -16
  72. data/app/assets/stylesheets/spud/calendar_events.css +0 -18
  73. data/app/assets/stylesheets/spud/events.css +0 -4
  74. data/app/views/calendars/_calendar.html.erb +0 -26
  75. data/app/views/calendars/_calendar_options.html.erb +0 -4
  76. data/config/application.rb +0 -50
  77. data/config/boot.rb +0 -6
  78. data/lib/spud/events/calendar.rb +0 -85
  79. data/lib/spud/events/calendar_builder.rb +0 -58
  80. data/lib/spud/events/configuration.rb +0 -8
  81. data/lib/spud/events/engine.rb +0 -26
  82. data/lib/spud/events/table_builder.rb +0 -88
  83. data/lib/spud/events/version.rb +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 62d8730ede7b8aed8931aba4790a22f605310a55
4
- data.tar.gz: e34410c623e5c079f2a73ddd171052c6e5457146
2
+ SHA256:
3
+ metadata.gz: e19d7ca4e2a12520dec1b46836f3fb0a9fceaf973b028ee85a341ece8635a323
4
+ data.tar.gz: 1090bda847f92900155a812cc7c08221e764a2c74a315c85580fb49039f9a1fc
5
5
  SHA512:
6
- metadata.gz: 640e250412a1ced8da27f58c0eb9961c2b5160b7cb2f18d37301b73afc55a4395b2113339aec6aee53b9c241fa2daafd7a08151bc8288f9d6d4b677164223ab6
7
- data.tar.gz: 783ee6db9798f88395d683a3c74973cca1fee061d9e7be723a0eae63d5fc61f073c7c45259061e31bdf5561637bbd6bbe15a94a9c0548c337437aaf4ef3b66fd
6
+ metadata.gz: a8d6a3e1ae6c08e9cd03cbe2bff49431147a815b435d9e1156d2fdc5ba19f6e1f9bbc36aa619a2c3c879b08f54179acbeb367cd41897646204de217d28a9114b
7
+ data.tar.gz: 667fd01ecad3c3e55f5dcc75a05430158ea517fa5304a168dab3f7a6a66104fdb6ea851215d7338870ffb3a8a73c1dc983f967ca362fc014f45c3a072d49e457
data/README.md CHANGED
@@ -24,7 +24,7 @@ Configruations
24
24
 
25
25
  * Set the layout for the calendar pages (Defualt is layouts/spud/calendar)
26
26
 
27
- Spud::Events.configure do |config|
27
+ SpudEvents.configure do |config|
28
28
  config.calendar_layout = 'application'
29
29
  end
30
30
 
@@ -36,6 +36,18 @@ Configruations
36
36
  *= require spud/events
37
37
  */
38
38
 
39
+ ## View Helpers
40
+
41
+ TB Events comes with a handful of view helpers for generating calendars. See the Rdoc documentation for detailed information.
42
+
43
+ Return a calendar as an html table for the given date:
44
+
45
+ spud_calendar_for_date(date)
46
+
47
+ Return a calendar for the given date, populated with event data:
48
+
49
+ spud_calendar_for_events(events, date, opts)
50
+
39
51
  Testing
40
52
  -----------------
41
53
 
data/Rakefile CHANGED
@@ -20,9 +20,9 @@ RDoc::Task.new(:rdoc) do |rdoc|
20
20
  rdoc.rdoc_files.include('lib/**/*.rb')
21
21
  end
22
22
 
23
- APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
23
+ APP_RAKEFILE = File.expand_path('../spec/dummy/Rakefile', __FILE__)
24
24
  load 'rails/tasks/engine.rake'
25
25
 
26
26
  Bundler::GemHelper.install_tasks
27
27
 
28
- require 'rake'
28
+ require 'rake'
@@ -0,0 +1,16 @@
1
+ //= require_self
2
+ //= require_directory
3
+
4
+ (function(){
5
+
6
+ spud.admin.events = {
7
+ init: function(){
8
+ $(document).on('ajax:success','.js-spud-calendar-delete-action', deletedCalendar);
9
+ }
10
+ };
11
+
12
+ var deletedCalendar = function(){
13
+ $(this).closest('.spud_events_admin_calendar_legend_item').fadeOut(500, function(){ $(this).remove(); });
14
+ };
15
+
16
+ })();
@@ -0,0 +1,4 @@
1
+ /*
2
+ *= require_self
3
+ *= require_directory
4
+ */
@@ -49,10 +49,8 @@
49
49
 
50
50
  #spud_events_admin_calendar,
51
51
  #spud_events_calendar {
52
- width: 700px;
53
- padding-bottom: 50px;
52
+ margin: 0 0 20px;
54
53
  position: relative;
55
- float: left;
56
54
  }
57
55
  #spud_events_calendar {
58
56
  width: auto;
@@ -66,7 +64,7 @@
66
64
  margin: 15px 0 0;
67
65
  }
68
66
  #spud_events_admin_calendar th,
69
- #spud_events_calendar th {
67
+ #spud_events_calendar th {
70
68
  text-align: center;
71
69
  }
72
70
  #spud_events_admin_calendar td,
@@ -78,21 +76,33 @@
78
76
  vertical-align: top;
79
77
  width: 98px;
80
78
  }
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 {
79
+ .calendar-day{
89
80
  position: absolute;
90
81
  top: 3px;
91
- right: 3px;
82
+ left: 3px;
92
83
  font-size: 11px;
93
84
  line-height: 11px;
94
85
  }
95
86
 
87
+ .not-month .calendar-day {
88
+ display: none;
89
+ }
90
+ .not-month .calendar-events {
91
+ display: none;
92
+ }
93
+
94
+ .calendar-events-list{
95
+ list-style: none;
96
+ margin: 10px 0 0;
97
+ padding: 0;
98
+ }
99
+ .calendar-events-list li{
100
+ margin: 4px;
101
+ }
102
+ .calendar-events-list a{
103
+ text-decoration: none;
104
+ }
105
+
96
106
  /* Calendar Legend
97
107
  ----------------------- */
98
108
  #spud_events_admin_calendar_legend,
@@ -100,7 +110,6 @@ span.spud_events_calendar_date {
100
110
  list-style: none;
101
111
  border: 1px solid #d9d9d9;
102
112
  padding: 0;
103
- margin: 45px 0 0 725px;
104
113
  }
105
114
  #spud_events_admin_calendar_legend li,
106
115
  #spud_events_calendar_legend li {
@@ -120,17 +129,3 @@ span.spud_events_calendar_date {
120
129
  #spud_events_calendar_legend li:last-child {
121
130
  border: none;
122
131
  }
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
- }
@@ -1,21 +1,20 @@
1
1
  class Admin::CalendarEventsController < Admin::ApplicationController
2
-
3
- add_breadcrumb "Events", :admin_list_spud_calendar_events_path
4
- belongs_to_spud_app :events
2
+ add_breadcrumb 'Events', :admin_list_spud_calendar_events_path
3
+ belongs_to_app :events
5
4
 
6
5
  respond_to :html, :xml, :json
7
- respond_to :js, :only => [:index, ]
6
+ respond_to :js, only: [:index]
8
7
 
9
8
  def index
10
9
  if params[:month]
11
- year = params[:year] ? params[:year] : Time.new.year
10
+ year = params[:year] ? params[:year].to_i : Date.today.year
12
11
  begin
13
- @calendar_date = Time.local(year, params[:month])
12
+ @calendar_date = Date.new(year, params[:month].to_i)
14
13
  rescue
15
- @calendar_date = Time.new
14
+ @calendar_date = Date.today
16
15
  end
17
16
  else
18
- @calendar_date = Time.new
17
+ @calendar_date = Date.today
19
18
  end
20
19
 
21
20
  if params[:spud_calendar] && calendar = SpudCalendar.find_by_title(params[:spud_calendar].titleize)
@@ -28,7 +27,7 @@ class Admin::CalendarEventsController < Admin::ApplicationController
28
27
  @calendars = SpudCalendar.all
29
28
  @current_calendar = params[:spud_calendar] ? params[:spud_calendar] : 0
30
29
 
31
- respond_with(@calendars, :include => :events)
30
+ respond_with(@calendars, include: :events)
32
31
  end
33
32
 
34
33
  def new
@@ -45,25 +44,24 @@ class Admin::CalendarEventsController < Admin::ApplicationController
45
44
  def create
46
45
  @calendar_event = SpudCalendarEvent.new(calendar_event_params)
47
46
  flash[:notice] = 'Calendar event was successfully created.' if @calendar_event.save
48
- respond_with(@calendar_event, :location => admin_list_spud_calendar_events_path)
47
+ respond_with(@calendar_event, location: admin_list_spud_calendar_events_path)
49
48
  end
50
49
 
51
50
  def update
52
51
  @calendar_event = SpudCalendarEvent.find(params[:id])
53
52
  flash[:notice] = 'Calendar event was successfully updated.' if @calendar_event.update_attributes(calendar_event_params)
54
- respond_with(@calendar_event, :location =>admin_list_spud_calendar_events_path)
53
+ respond_with(@calendar_event, location: admin_list_spud_calendar_events_path)
55
54
  end
56
55
 
57
56
  def destroy
58
57
  @calendar_event = SpudCalendarEvent.find(params[:id])
59
- @calendar_event.destroy
60
- respond_with(@calendar_event, :location => admin_list_spud_calendar_events_path)
58
+ flash[:notice] = 'Calendar event deleted successfully' if @calendar_event.destroy
59
+ respond_with(@calendar_event, location: admin_list_spud_calendar_events_path)
61
60
  end
62
61
 
63
- private
62
+ private
64
63
 
65
64
  def calendar_event_params
66
65
  params.require(:spud_calendar_event).permit(:title, :description, :start_at, :end_at, :all_day, :spud_calendar_id, :spud_calendar, :location, :address, :address_2, :city, :state, :zip)
67
66
  end
68
-
69
67
  end
@@ -1,13 +1,12 @@
1
1
  class Admin::CalendarsController < Admin::ApplicationController
2
+ add_breadcrumb 'Events', :admin_list_spud_calendar_events_path
2
3
 
3
- add_breadcrumb "Events", :admin_list_spud_calendar_events_path
4
-
5
- belongs_to_spud_app :events
4
+ belongs_to_app :events
6
5
 
7
6
  respond_to :html, :xml, :json, :js
8
7
 
9
8
  def new
10
- @page_name = "New Calendar"
9
+ @page_name = 'New Calendar'
11
10
  @calendar = SpudCalendar.new
12
11
  respond_with(@calendar)
13
12
  end
@@ -17,12 +16,12 @@ class Admin::CalendarsController < Admin::ApplicationController
17
16
  if @calendar.save
18
17
  redirect_to admin_list_spud_calendar_events_path
19
18
  else
20
- render :action => "new"
19
+ render action: 'new'
21
20
  end
22
21
  end
23
22
 
24
23
  def edit
25
- @page_name = "Edit Calendar"
24
+ @page_name = 'Edit Calendar'
26
25
  @calendar = SpudCalendar.find(params[:id])
27
26
  respond_with(@calendar)
28
27
  end
@@ -33,7 +32,7 @@ class Admin::CalendarsController < Admin::ApplicationController
33
32
  flash[:notice] = 'Calendar was successfully updated.'
34
33
  redirect_to admin_list_spud_calendar_events_path
35
34
  else
36
- render :action => "edit"
35
+ render action: 'edit'
37
36
  end
38
37
  end
39
38
 
@@ -44,14 +43,13 @@ class Admin::CalendarsController < Admin::ApplicationController
44
43
  end
45
44
  @calendar.destroy
46
45
  respond_with(@calendar) do |format|
47
- format.js { render(:nothing => true) }
46
+ format.js { render(nothing: true) }
48
47
  end
49
48
  end
50
49
 
51
- private
50
+ private
52
51
 
53
52
  def calendar_params
54
- params.require(:spud_calendar).permit(:title, :color)
53
+ params.require(:spud_calendar).permit(:title)
55
54
  end
56
-
57
55
  end
@@ -1,8 +1,14 @@
1
1
  class CalendarEventsController < ApplicationController
2
-
3
- layout Spud::Events.config.calendar_layout
4
-
5
- def show
6
- @event = SpudCalendarEvent.find(params[:id])
7
- end
2
+ respond_to :html, :json
3
+ layout SpudEvents.config.calendar_layout
4
+
5
+ def index
6
+ @events = SpudCalendarEvent.ordered.paginate(per_page: 10, page: params[:page])
7
+ respond_with @events
8
+ end
9
+
10
+ def show
11
+ @event = SpudCalendarEvent.find(params[:id])
12
+ respond_with @event
13
+ end
8
14
  end
@@ -1,30 +1,30 @@
1
1
  class CalendarsController < ApplicationController
2
-
3
- layout Spud::Events.config.calendar_layout
2
+ respond_to :html, :json
3
+ layout SpudEvents.config.calendar_layout
4
+ before_action :calendar_date
4
5
 
5
6
  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
7
  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).to_a
8
+ @events = calendar.spud_calendar_events.in_month_of(@calendar_date).order(:start_at).to_a
18
9
  else
19
- @events = SpudCalendarEvent.where(["start_at >= ?",@calendar_date]).order(:start_at).to_a
10
+ @events = SpudCalendarEvent.in_month_of(@calendar_date).order(:start_at).to_a
20
11
  end
21
12
  @current_calendar = params[:calendar] ? params[:calendar] : 0
22
- @page_title = @calendar_date.strftime("Calendar - %B %Y")
13
+ respond_with @events
23
14
  end
24
15
 
25
- def default_date
26
- tempDate = Time.new
27
- return Time.local(tempDate.year,tempDate.month)
16
+ private
28
17
 
18
+ def calendar_date
19
+ if params[:month]
20
+ year = params[:year] ? params[:year].to_i : Date.today.year
21
+ begin
22
+ @calendar_date = Date.new(year, params[:month].to_i)
23
+ rescue
24
+ @calendar_date = Date.today
25
+ end
26
+ else
27
+ @calendar_date = Date.today
28
+ end
29
29
  end
30
30
  end
@@ -1,15 +1,13 @@
1
1
  module Admin::CalendarsHelper
2
-
3
- def link_to_previous_admin_calendar_month(date, url_for_options)
4
- date = date.advance(:months => -1)
2
+ def link_to_previous_admin_calendar_month(date, _url_for_options = {})
3
+ date = date.advance(months: -1)
5
4
  calendar = params[:calendar] ? params[:calendar] : nil
6
- link_to('&laquo; Previous Month'.html_safe, admin_list_spud_calendar_events_path(:month => date.month, :year => date.year, :calendar => calendar), :class => 'spud_events_calendar_link previous_calendar btn').html_safe
5
+ link_to('&laquo; Previous Month'.html_safe, admin_list_spud_calendar_events_path(month: date.month, year: date.year, calendar: calendar), class: 'spud_events_calendar_link previous_calendar btn btn-sm btn-default').html_safe
7
6
  end
8
7
 
9
- def link_to_next_admin_calendar_month(date, url_for_options)
10
- date = date.advance(:months => 1)
8
+ def link_to_next_admin_calendar_month(date, _url_for_options = {})
9
+ date = date.advance(months: 1)
11
10
  calendar = params[:calendar] ? params[:calendar] : nil
12
- link_to('Next Month &raquo;'.html_safe, admin_list_spud_calendar_events_path(:month => date.month, :year => date.year, :calendar => calendar), :class => 'spud_events_calendar_link next_calendar btn').html_safe
11
+ link_to('Next Month &raquo;'.html_safe, admin_list_spud_calendar_events_path(month: date.month, year: date.year, calendar: calendar), class: 'spud_events_calendar_link next_calendar btn btn-sm btn-default pull-right').html_safe
13
12
  end
14
-
15
13
  end
@@ -1,48 +1,79 @@
1
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('&laquo; Previous Month'.html_safe, calendar_path(:month => date.month, :year => date.year, :calendar => calendar), :class => 'spud_events_calendar_link previous_calendar btn').html_safe
2
+ # Builds a calendar for the given date
3
+ #
4
+ # * date: Determines the month to be displayed. Given date will have the "today" css class
5
+ # * opts:
6
+ # - headers: Array of weekday headers (optional)
7
+ #
8
+ def spud_calendar_for_date(date, opts = {}, &block)
9
+ events = SpudCalendarEvent.in_month_of(date)
10
+ spud_calendar_for_events(events, date, opts, &block)
7
11
  end
8
12
 
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 &raquo;'.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
- content = with_output_buffer{block.call(builder.new(objects||[], self, options))}
21
- self.content_tag(:table, content, html_options, false)
22
- end
23
-
24
- def get_calendar_options(text_for_all)
25
- options_for_select(SpudCalendar.all.collect { |f| [f.title, f.title.gsub(/([^A-Z0-9]+)/i, "-").downcase] }.insert(0, text_for_all), @current_calendar)
13
+ # Builds a calendar for the given date and identifier
14
+ #
15
+ # * identifier: Symbol for the SpudCalendar you wish to display
16
+ # * date: Determines the month to be displayed. Given date will have the "today" css class
17
+ # * opts:
18
+ # - headers: Array of weekday headers (optional)
19
+ #
20
+ def spud_calendar_for_identifier(identifier, date, opts = {}, &block)
21
+ calendar = SpudCalendar.with_identifier(identifier)
22
+ if calendar.present?
23
+ events = calendar.spud_calendar_events.in_month_of(date)
24
+ else
25
+ logger.warn "Failed to load calendar by identifer '#{identifier}'. Does it exist?"
26
+ events = []
27
+ end
28
+ spud_calendar_for_events(events, date, opts, &block)
26
29
  end
27
30
 
28
- def calendar_fore_color(backcolor)
29
- fore_color = "ffffff"
30
- if backcolor.length != 6
31
- return fore_color
31
+ # Builds a calendar for the given date, with events
32
+ #
33
+ # * events: An array or relation of SpudCalendarEvent records
34
+ # * date: Determines the month to be displayed. Given date will have the "today" css class
35
+ # * opts:
36
+ # - headers: Array of weekday headers (optional)
37
+ #
38
+ def spud_calendar_for_events(events, date, opts = {}, &block)
39
+ events_array = events.to_a
40
+ cache(['spud-calendar', date.to_s, events]) do
41
+ concat(
42
+ SpudEvents::CalendarBuilder.new(self, date, opts).table do |day|
43
+ events = extract_events_for_date(events_array, day)
44
+ if block
45
+ block.call(day, events)
46
+ else
47
+ concat content_tag(:span, day.day.to_s, class: 'calendar-day')
48
+ if events.length > 0
49
+ list_items = events.collect do |event|
50
+ '<li>' + link_to(event.title, calendar_event_path(event)) + '</li>'
51
+ end.join('')
52
+ concat content_tag(:ul, raw(list_items), class: 'events-list')
53
+ end
54
+ end
55
+ end
56
+ )
32
57
  end
58
+ end
33
59
 
34
- red = backcolor[0,2].hex
35
- green = backcolor[2,2].hex
36
- blue = backcolor[4,2].hex
60
+ def link_to_previous_calendar_month(date)
61
+ date = date.advance(months: -1)
62
+ calendar = params[:calendar] ? params[:calendar] : nil
63
+ link_to('&laquo; Previous Month'.html_safe, calendar_path(month: date.month, year: date.year, calendar: calendar), class: 'spud_events_calendar_link previous_calendar btn').html_safe
64
+ end
37
65
 
38
- perceived_brightness = Math.sqrt(red*red*0.241 + green*green*0.691 + blue*blue*0.068)
66
+ def link_to_next_calendar_month(date)
67
+ date = date.advance(months: 1)
68
+ calendar = params[:calendar] ? params[:calendar] : nil
69
+ link_to('Next Month &raquo;'.html_safe, calendar_path(month: date.month, year: date.year, calendar: calendar), class: 'spud_events_calendar_link next_calendar btn').html_safe
70
+ end
39
71
 
72
+ private
40
73
 
41
- # average = (red+green+blue) / 3
42
- if(perceived_brightness >= 130)
43
- return "000000"
44
- else
45
- return fore_color
74
+ def extract_events_for_date(events, date)
75
+ events.select do |event|
76
+ date >= event.start_date && date <= event.end_date
46
77
  end
47
78
  end
48
79
  end