simple_calendar 0.0.4 → 0.0.5
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/README.md +1 -1
- data/lib/simple_calendar/version.rb +1 -1
- data/lib/simple_calendar/view_helpers.rb +89 -55
- metadata +3 -3
data/README.md
CHANGED
@@ -1,78 +1,112 @@
|
|
1
1
|
module SimpleCalendar
|
2
2
|
module ViewHelpers
|
3
|
+
|
3
4
|
def calendar(events, &block)
|
4
|
-
|
5
|
+
selected_month = Date.civil((params[:year] || Time.zone.now.year).to_i, (params[:month] || Time.zone.now.month).to_i)
|
6
|
+
current_date = Date.today
|
7
|
+
range = build_range selected_month
|
8
|
+
month_array = build_month range
|
5
9
|
|
6
|
-
|
7
|
-
month_header(day) + day_header + body(day, events, block)
|
8
|
-
end
|
10
|
+
draw_calendar(selected_month, month_array, current_date, events, block)
|
9
11
|
end
|
10
12
|
|
11
|
-
|
12
|
-
start_date = date.beginning_of_month
|
13
|
-
start_date = start_date.beginning_of_week.advance(:days => -1) unless start_date.sunday?
|
14
|
-
start_date
|
15
|
-
end
|
13
|
+
private
|
16
14
|
|
17
|
-
def
|
18
|
-
|
19
|
-
|
20
|
-
end_date
|
21
|
-
end
|
15
|
+
def build_range(selected_month)
|
16
|
+
start_date = selected_month.beginning_of_month
|
17
|
+
start_date = start_date.sunday? ? start_date : start_date.beginning_of_week.advance(:days => -1)
|
22
18
|
|
23
|
-
|
24
|
-
|
25
|
-
previous_month = day.advance :months => -1
|
26
|
-
next_month = day.advance :months => 1
|
27
|
-
tags = []
|
28
|
-
tags << link_to("<", request.fullpath.split('?').first + "?month=#{previous_month.month}&year=#{previous_month.year}")
|
29
|
-
tags << day.strftime("%B %Y")
|
30
|
-
tags << link_to(">", request.fullpath.split('?').first + "?month=#{next_month.month}&year=#{next_month.year}")
|
31
|
-
tags.join.html_safe
|
32
|
-
end
|
33
|
-
end
|
19
|
+
end_date = selected_month.end_of_month
|
20
|
+
end_date = end_date.sunday? ? end_date : end_date.advance(:days => 1).end_of_week
|
34
21
|
|
35
|
-
|
36
|
-
content_tag :thead do
|
37
|
-
content_tag :tr do
|
38
|
-
I18n.t(:"date.abbr_day_names").map{ |day| content_tag :th, day }.join.html_safe
|
39
|
-
end
|
40
|
-
end
|
22
|
+
date_range = (start_date..end_date).to_a
|
41
23
|
end
|
42
24
|
|
43
|
-
def
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
current_date = current_date.tomorrow
|
57
|
-
tags.join.html_safe
|
58
|
-
end
|
25
|
+
def build_month(date_range)
|
26
|
+
month = []
|
27
|
+
week = []
|
28
|
+
i = 0
|
29
|
+
|
30
|
+
date_range.each do |date|
|
31
|
+
week << date
|
32
|
+
if i == 6
|
33
|
+
i = 0
|
34
|
+
month << week
|
35
|
+
week = []
|
36
|
+
else
|
37
|
+
i += 1
|
59
38
|
end
|
60
|
-
weeks.join.html_safe
|
61
39
|
end
|
40
|
+
|
41
|
+
month
|
62
42
|
end
|
63
43
|
|
64
|
-
|
65
|
-
|
66
|
-
|
44
|
+
# Renders the calendar table
|
45
|
+
def draw_calendar(selected_month, month, current_date, events, block)
|
46
|
+
tags = []
|
67
47
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
48
|
+
content_tag(:table, :class => "table table-bordered table-striped calendar") do
|
49
|
+
tags << month_header(selected_month)
|
50
|
+
tags << content_tag(:thead, content_tag(:tr, I18n.t("date.abbr_day_names").collect { |name| content_tag :th, name, :class => (selected_month.month == Date.today.month && Date.today.strftime("%a") == name ? "current-day" : nil)}.join.html_safe))
|
51
|
+
tags << content_tag(:tbody) do
|
52
|
+
|
53
|
+
month.collect do |week|
|
54
|
+
content_tag(:tr, :class => (week.include?(Date.today) ? "current-week week" : "week")) do
|
55
|
+
|
56
|
+
week.collect do |date|
|
57
|
+
tb_class = []
|
58
|
+
tb_class << not_current_month = (date.month == selected_month.month ? "" : "not-currnet-month")
|
59
|
+
tb_class << (Date.today == date ? "today day" : "day")
|
60
|
+
|
61
|
+
content_tag(:td, :class => tb_class.join(" ")) do
|
62
|
+
content_tag(:div) do
|
63
|
+
divs = []
|
64
|
+
|
65
|
+
concat content_tag(:div, date.day.to_s)
|
66
|
+
divs << day_events(date, events).collect {|event| block.call(event) }
|
67
|
+
divs.join.html_safe
|
68
|
+
end #content_tag :div
|
69
|
+
end #content_tag :td
|
70
|
+
|
71
|
+
end.join.html_safe
|
72
|
+
end #content_tag :tr
|
73
|
+
|
74
|
+
end.join.html_safe
|
75
|
+
end #content_tag :tbody
|
76
|
+
|
77
|
+
tags.join.html_safe
|
78
|
+
end #content_tag :table
|
72
79
|
end
|
73
80
|
|
81
|
+
# Returns an array of events for a given day
|
74
82
|
def day_events(date, events)
|
75
83
|
events.select { |e| e.start_time_column.to_date == date }
|
76
84
|
end
|
85
|
+
|
86
|
+
# Generates the header that includes the month and next and previous months
|
87
|
+
def month_header(selected_month)
|
88
|
+
content_tag :h2 do
|
89
|
+
previous_month = selected_month.advance :months => -1
|
90
|
+
next_month = selected_month.advance :months => 1
|
91
|
+
tags = []
|
92
|
+
|
93
|
+
tags << month_link("«".html_safe, previous_month, :class => "previous-month")
|
94
|
+
tags << selected_month.strftime("%B %Y")
|
95
|
+
tags << month_link("»".html_safe, next_month, :class => "next-month")
|
96
|
+
|
97
|
+
tags.join.html_safe
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
# Generates the link to next and previous months
|
102
|
+
def month_link(text, month, opts={})
|
103
|
+
link_to(text, "#{simple_calendar_path}?month=#{month.month}&year=#{month.year}", opts)
|
104
|
+
end
|
105
|
+
|
106
|
+
# Returns the full path to the calendar
|
107
|
+
# This is used for generating the links to the next and previous months
|
108
|
+
def simple_calendar_path
|
109
|
+
request.fullpath.split('?').first
|
110
|
+
end
|
77
111
|
end
|
78
112
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_calendar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-06-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -64,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
64
|
version: '0'
|
65
65
|
requirements: []
|
66
66
|
rubyforge_project: simple_calendar
|
67
|
-
rubygems_version: 1.8.
|
67
|
+
rubygems_version: 1.8.23
|
68
68
|
signing_key:
|
69
69
|
specification_version: 3
|
70
70
|
summary: A simple Rails 3 calendar
|