simple_calendar 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fc702d5bfc9216617da9921539291ed03e61fd97
4
- data.tar.gz: 4eec246dd685d28eea8f822483380c9121e53912
3
+ metadata.gz: ae8f18ccce8e55fd2c7caefb28f9260befdb50c8
4
+ data.tar.gz: ed5657eb62db1fee6021f516f935eed13c55335c
5
5
  SHA512:
6
- metadata.gz: 45d62759c32d0a1ec5dadf6ebe3d819f8604bef0c4d99f5e45832d4e0d5815d001f788155d39d5067ee66979298ec23ac035b37940b571c7c00ca0c909bd8aa0
7
- data.tar.gz: b0ece55d4cac8003ca070a9bd8803e02c7ce6f9c6ca6f7357f65eaa4db12540e2a5f0de00544589b4ac1446ce5c91a489c131f945da852086376a24bdd26b7fe
6
+ metadata.gz: 687581a924042ef175fede1beb7fbf550dbbf5e8a936b7365d6b9c362d9484216c092bcc80abfcf3a116dff5184758393db77514c2023285662b86417e73170c
7
+ data.tar.gz: 2d70ac7b3b28297e0e6cdbf457078240dbadcff2ed0635d1f4fccae5e45acc722ebc5814367137ca9001908bbc51872987fb03c0540ffe2b00ad3ba6da5c25a8
data/README.md CHANGED
@@ -106,7 +106,10 @@ this globally, you can put this line in
106
106
  Date.beginning_of_week = :sunday
107
107
  ```
108
108
 
109
- Setting classes on the table and elements are pretty:
109
+ Setting classes on the table and elements are pretty easy.
110
+
111
+ Each of the options are passed directly to the
112
+ the `content_tag` method so each of them **must** be a hash.
110
113
 
111
114
  ```ruby
112
115
 
@@ -120,8 +123,44 @@ Setting classes on the table and elements are pretty:
120
123
  This will set the class of `table table-bordered` on the `table` HTML
121
124
  element.
122
125
 
123
- Each of the `table`, `tr`, and `td`, options are passed directly to the
124
- the `content_tag` method so each of them **must** be a hash.
126
+ ### Custom Day Classes
127
+
128
+ `td` is an option for setting the options on the td content tag that is
129
+ generated. By default, simple_calendar renders the following classes for
130
+ any given day in a calendar:
131
+
132
+
133
+ ```ruby
134
+ td_class = ["day"]
135
+ td_class << "today" if today == current_calendar_date
136
+ td_class << "past" if today > current_calendar_date
137
+ td_class << "future" if today < current_calendar_date
138
+ td_class << "prev-month" if start_date.month != current_calendar_date.month && current_calendar_date < start_date
139
+ td_class << "next-month" if start_date.month != current_calendar_date.month && current_calendar_date > start_date
140
+ td_class << "current-month" if start_date.month == current_calendar_date.month
141
+ td_class << "wday-#{current_calendar_date.wday.to_s}"
142
+ ```
143
+
144
+ You can set your CSS styles based upon these if you want to highlight
145
+ specific days or types of days. If you wish to override this
146
+ functionality, just set the `tr` option to a lambda that accepts two
147
+ dates and returns a hash. The hash will be passed in directly to the
148
+ content_tag options. If you wish to set a class or data attributes, just
149
+ set them as you normally would in a content_tag call.
150
+
151
+ ```erb
152
+ <%= month_calendar :start_date, tr: ->(start_date,
153
+ current_calendar_date) { {class: "calendar-date", data: {day:
154
+ current_calendar_date}} } do |day| %>
155
+ <% end %>
156
+ ```
157
+
158
+ This generate each day in the calendar like this:
159
+
160
+ ```html
161
+ <td class="calendar-date" data-day="2014-05-11">
162
+ </td>
163
+ ```
125
164
 
126
165
  ### Custom Header Links
127
166
 
@@ -143,15 +182,15 @@ The default `month_calendar` look like this:
143
182
  <% end %>
144
183
  ```
145
184
 
146
- The `prev_link` option is a standard `link_to` that is a left arrow and
185
+ `prev_link` option is a standard `link_to` that is a left arrow and
147
186
  with the current url having `?start_date=2014-04-30` appended to it as
148
187
  a date in the previous view of the calendar.
149
188
 
150
- The `next_link` option is a standard `link_to` that is a right arrow and
189
+ `next_link` option is a standard `link_to` that is a right arrow and
151
190
  with the current url having `?start_date=2014-06-01` appended to it as
152
191
  a date in the next view of the calendar.
153
192
 
154
- The `header` option is just a simple span tag with the month and year
193
+ `header` option is just a simple span tag with the month and year
155
194
  inside of it.
156
195
 
157
196
  If you wish to disable any of these partsof the header, just pass in
@@ -162,6 +201,13 @@ If you wish to disable any of these partsof the header, just pass in
162
201
  <% end %>
163
202
  ```
164
203
 
204
+ ## TODO
205
+
206
+ - Having an "events" option would be nice. Users can pass in all the
207
+ objects and we can use it to auto-filter them so the user doesn't
208
+ have to. This is what the previous version did and yielded the
209
+ day's events to the block.
210
+ - Multi-day events?
165
211
 
166
212
  ## Author
167
213
 
@@ -1,3 +1,3 @@
1
1
  module SimpleCalendar
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -4,9 +4,11 @@ module SimpleCalendar
4
4
  start_date = (params[param_name] || Time.zone.now).to_date
5
5
 
6
6
  options.reverse_merge!(
7
+ td: day_classes,
7
8
  prev_link: ->(range) { link_to raw("&laquo;"), param_name => range.first - 1.day },
8
- header: ->{ content_tag :span, "#{I18n.t("date.month_names")[start_date.month]} #{start_date.year}", class: "calendar-header" },
9
+ header: month_header,
9
10
  next_link: ->(range) { link_to raw("&raquo;"), param_name => range.last + 1.day },
11
+ start_date: start_date,
10
12
  )
11
13
  render_calendar month_range(start_date), options, &block
12
14
  end
@@ -16,9 +18,11 @@ module SimpleCalendar
16
18
  number_of_weeks = options.fetch(:number_of_weeks, 1)
17
19
 
18
20
  options.reverse_merge!(
21
+ td: day_classes,
19
22
  prev_link: ->(range) { link_to raw("&laquo;"), param_name => range.first - 1.day },
20
23
  header: false,
21
24
  next_link: ->(range) { link_to raw("&raquo;"), param_name => range.last + 1.day },
25
+ start_date: start_date,
22
26
  )
23
27
  render_calendar week_range(start_date, number_of_weeks), options, &block
24
28
  end
@@ -28,9 +32,11 @@ module SimpleCalendar
28
32
  number_of_days_to_advance = options.fetch(:number_of_days, 4) - 1
29
33
 
30
34
  options.reverse_merge!(
35
+ td: day_classes,
31
36
  prev_link: ->(range) { link_to raw("&laquo;"), param_name => range.first - 1.day },
32
37
  header: false,
33
38
  next_link: ->(range) { link_to raw("&raquo;"), param_name => range.last + 1.day },
39
+ start_date: start_date,
34
40
  )
35
41
  render_calendar calendar_range(start_date, number_of_days_to_advance), options, &block
36
42
  end
@@ -53,20 +59,21 @@ module SimpleCalendar
53
59
  def render_calendar(range, options, &block)
54
60
  raise 'SimpleCalendar requires a block' unless block_given?
55
61
 
56
- @block = block
57
- @options = options.reverse_merge default_options
62
+ @block = block
63
+ @options = options.reverse_merge default_options
64
+ @start_date = options.fetch(:start_date)
58
65
 
59
66
  capture do
60
- concat render_header(range)
67
+ concat render_header(@start_date, range)
61
68
  concat render_table(range)
62
69
  end
63
70
  end
64
71
 
65
- def render_header(range)
72
+ def render_header(start_date, range)
66
73
  capture do
67
74
  content_tag :div do
68
75
  concat get_options(@options[:prev_link], range)
69
- concat get_options(@options[:header])
76
+ concat get_options(@options[:header], start_date)
70
77
  concat get_options(@options[:next_link], range)
71
78
  end
72
79
  end
@@ -93,7 +100,7 @@ module SimpleCalendar
93
100
 
94
101
  def render_week(week)
95
102
  results = week.map do |day|
96
- content_tag :td, get_options(@options[:td], day) do
103
+ content_tag :td, get_options(@options[:td], @start_date, day) do
97
104
  @block.call(day)
98
105
  end
99
106
  end
@@ -116,5 +123,28 @@ module SimpleCalendar
116
123
  def default_options
117
124
  { table: {}, tr: {}, td: {}, }
118
125
  end
126
+
127
+ def day_classes
128
+ ->(start_date, current_calendar_date) {
129
+ today = Time.zone.now.to_date
130
+ td_class = ["day"]
131
+
132
+ td_class << "today" if today == current_calendar_date
133
+ td_class << "past" if today > current_calendar_date
134
+ td_class << "future" if today < current_calendar_date
135
+ td_class << "prev-month" if start_date.month != current_calendar_date.month && current_calendar_date < start_date
136
+ td_class << "next-month" if start_date.month != current_calendar_date.month && current_calendar_date > start_date
137
+ td_class << "current-month" if start_date.month == current_calendar_date.month
138
+ td_class << "wday-#{current_calendar_date.wday.to_s}"
139
+
140
+ { class: td_class.join(" ") }
141
+ }
142
+ end
143
+
144
+ def month_header
145
+ ->(start_date) {
146
+ content_tag :span, "#{I18n.t("date.month_names")[start_date.month]} #{start_date.year}", class: "calendar-header"
147
+ }
148
+ end
119
149
  end
120
150
  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: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Oliver