radiant-event_calendar-extension 1.5.1 → 1.5.3
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 +38 -36
- data/app/controllers/events_controller.rb +1 -0
- data/app/models/event.rb +4 -0
- data/app/views/events/_event.html.haml +5 -2
- data/config/initializers/radiant_config.rb +1 -1
- data/config/locales/en.yml +1 -0
- data/config/routes.rb +2 -1
- data/lib/event_calendar_tags.rb +43 -54
- data/lib/radiant-event_calendar-extension.rb +1 -1
- data/spec/lib/event_calendar_page_spec.rb +4 -4
- data/spec/lib/event_calendar_tags_spec.rb +2 -3
- metadata +5 -6
- data/radiant-event_calendar-extension-1.5.0.gem +0 -0
data/README.md
CHANGED
@@ -65,44 +65,9 @@ Should be obvious. There are a few points to remember:
|
|
65
65
|
* Recurrence is for the repetition of identical separate events. A single event that spans several days only needs to have the right start and end times.
|
66
66
|
* End times are optional: an event with just a start time is just listed where it begins.
|
67
67
|
|
68
|
-
### Displaying events with the EventsController
|
69
|
-
|
70
|
-
The events controller uses `share_layouts` to define various page parts that your layout can bring in. To use it, create a layout with any or all of these parts:
|
71
|
-
|
72
|
-
* `title` is the page title and can also be shown with `r:title`
|
73
|
-
* `events` is a formatted list of events with date stamps and descriptions
|
74
|
-
* `continuing_events` is a compact list of events that have already begun but which continue into the period being shown
|
75
|
-
* `calendar` is a usual calendar block with links to months and days. Days without events are not linked.
|
76
|
-
* `pagination` is the usual will_paginate block.
|
77
|
-
* `faceting` here only gives the option to remove any date filters that have been applied. If you add the `taggable_events` extension it gets more useful.
|
78
|
-
|
79
|
-
Set the config entry `event_calendar.layout` to the name of your layout and point a browser at /calendar to see what you've got.
|
80
|
-
|
81
|
-
Here's a basic sample layout that should just work:
|
82
|
-
|
83
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
84
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
85
|
-
|
86
|
-
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
87
|
-
<head>
|
88
|
-
<title><r:title /></title>
|
89
|
-
<link rel="stylesheet" href="/stylesheets/event_calendar.css" />
|
90
|
-
</head>
|
91
|
-
<body>
|
92
|
-
<h1 id="pagetitle"><r:title /></h1>
|
93
|
-
<r:content part="faceting" />
|
94
|
-
<r:content part="calendar" />
|
95
|
-
<r:content part="events" />
|
96
|
-
<r:content part="continuing_events" />
|
97
|
-
<r:content part="pagination" />
|
98
|
-
</body>
|
99
|
-
</html>
|
100
|
-
|
101
|
-
One quirk that might go away: at the moment if there are few new events then the continuing events are moved into the events page part. Most layouts work better that way.
|
102
|
-
|
103
68
|
### Displaying events with an EventCalendar page
|
104
69
|
|
105
|
-
Set up a new page at /events/ with the type 'EventCalendar'. To show a pageable calendar view of the current month, all you need is this:
|
70
|
+
This is the preferred method. Set up a new page at /events/ with the type 'EventCalendar'. To show a pageable calendar view of the current month, all you need is this:
|
106
71
|
|
107
72
|
<r:events:as_calendar month="now" month_links="true" />
|
108
73
|
|
@@ -139,6 +104,43 @@ If you have another column in your layout, try adding this:
|
|
139
104
|
|
140
105
|
For clickable thumbnails of coming months.
|
141
106
|
|
107
|
+
### Displaying events with the EventsController
|
108
|
+
|
109
|
+
I think I'm going to deprecate this use some time soon: it's too hard to adapt to local circumstances. For now it still works:
|
110
|
+
|
111
|
+
The events controller uses `share_layouts` to define various page parts that your layout can bring in. To use it, create a layout with any or all of these parts.
|
112
|
+
|
113
|
+
* `title` is the page title and can also be shown with `r:title`
|
114
|
+
* `events` is a formatted list of events with date stamps and descriptions
|
115
|
+
* `continuing_events` is a compact list of events that have already begun but which continue into the period being shown
|
116
|
+
* `calendar` is a usual calendar block with links to months and days. Days without events are not linked.
|
117
|
+
* `pagination` is the usual will_paginate block.
|
118
|
+
* `faceting` here only gives the option to remove any date filters that have been applied. If you add the `taggable_events` extension it gets more useful.
|
119
|
+
|
120
|
+
Set the config entry `event_calendar.layout` to the name of your layout and point a browser at /calendar to see what you've got.
|
121
|
+
|
122
|
+
Here's a basic sample layout that should just work:
|
123
|
+
|
124
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
125
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
126
|
+
|
127
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
128
|
+
<head>
|
129
|
+
<title><r:title /></title>
|
130
|
+
<link rel="stylesheet" href="/stylesheets/event_calendar.css" />
|
131
|
+
</head>
|
132
|
+
<body>
|
133
|
+
<h1 id="pagetitle"><r:title /></h1>
|
134
|
+
<r:content part="faceting" />
|
135
|
+
<r:content part="calendar" />
|
136
|
+
<r:content part="events" />
|
137
|
+
<r:content part="continuing_events" />
|
138
|
+
<r:content part="pagination" />
|
139
|
+
</body>
|
140
|
+
</html>
|
141
|
+
|
142
|
+
One quirk that might go away: at the moment if there are few new events then the continuing events are moved into the events page part. Most layouts work better that way.
|
143
|
+
|
142
144
|
### Compatibility
|
143
145
|
|
144
146
|
I've tested this with Darwin Calendar Server (on Ubuntu), with Google Calendar and with feeds published from iCal on a mac. It should work just as well with iCal server on OS X Server, and in theory any other CalDav-compliant back end. See http://caldav.calconnect.org/ for more possibilities.
|
data/app/models/event.rb
CHANGED
@@ -191,6 +191,10 @@ class Event < ActiveRecord::Base
|
|
191
191
|
I18n.l start_date, :format => :calendar_day_name
|
192
192
|
end
|
193
193
|
|
194
|
+
def short_day
|
195
|
+
I18n.l start_date, :format => :calendar_short_day
|
196
|
+
end
|
197
|
+
|
194
198
|
def mday
|
195
199
|
I18n.l start_date, :format => :calendar_day_of_month
|
196
200
|
end
|
@@ -5,9 +5,12 @@
|
|
5
5
|
- event_master_id = event.master_id || event.id
|
6
6
|
- repeating = true if @seen_events[event_master_id]
|
7
7
|
- @seen_events[event_master_id] = true;
|
8
|
-
-
|
8
|
+
- cssclasses = ['event']
|
9
|
+
- cssclasses << 'repeat' if repeating
|
10
|
+
- cssclasses << event.calendar.slug if event.calendar
|
9
11
|
|
10
|
-
|
12
|
+
|
13
|
+
%div{:class => cssclasses.join(' ')}
|
11
14
|
- unless no_date
|
12
15
|
.datemark
|
13
16
|
.mon= event.short_month
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Radiant.config do |config|
|
2
2
|
config.namespace('event_calendar') do |calendar|
|
3
|
-
calendar.define 'path', :default => "
|
3
|
+
calendar.define 'path', :default => "cal", :allow_blank => false
|
4
4
|
calendar.define 'icals_path', :default => "/icals", :allow_blank => false
|
5
5
|
calendar.define 'cache_duration', :type => :integer, :default => 3600, :units => 'seconds'
|
6
6
|
calendar.define 'refresh_interval', :type => :integer, :default => 3600, :units => 'seconds'
|
data/config/locales/en.yml
CHANGED
data/config/routes.rb
CHANGED
@@ -7,7 +7,8 @@ ActionController::Routing::Routes.draw do |map|
|
|
7
7
|
cal.calendars_home '/', :controller => 'events', :action => 'index'
|
8
8
|
end
|
9
9
|
|
10
|
-
calendar_prefix = Radiant.config['event_calendar.path'] || "
|
10
|
+
calendar_prefix = Radiant.config['event_calendar.path'] || "cal"
|
11
|
+
calendar_prefix = nil if calendar_prefix.blank?
|
11
12
|
map.resources :events, :path_prefix => calendar_prefix, :only => [:index, :show]
|
12
13
|
map.calendar "#{calendar_prefix}.:format", :controller => 'events', :action => 'index'
|
13
14
|
map.calendar_year "#{calendar_prefix}/:year", :controller => 'events', :action => 'index'
|
data/lib/event_calendar_tags.rb
CHANGED
@@ -359,43 +359,6 @@ module EventCalendarTags
|
|
359
359
|
%{<a href="#{tag.render('calendar:url')}#{anchor}"#{attributes}>#{text}</a>}
|
360
360
|
end
|
361
361
|
|
362
|
-
desc %{
|
363
|
-
Renders the path to the local .ics file for this calendar, suitable for read-only subscription in iCal or other calendar programs.
|
364
|
-
|
365
|
-
Usage:
|
366
|
-
<pre><code><r:calendar:ical_url /></code></pre>
|
367
|
-
}
|
368
|
-
tag "calendar:ical_url" do |tag|
|
369
|
-
tag.locals.calendar.to_ics
|
370
|
-
end
|
371
|
-
|
372
|
-
desc %{
|
373
|
-
Renders a link to the local .ics file for this calendar, suitable for read-only subscription in iCal or other calendar programs.
|
374
|
-
Link attributes are passed through as usual.
|
375
|
-
|
376
|
-
Usage:
|
377
|
-
<pre><code><r:calendar:ical_link /></code></pre>
|
378
|
-
}
|
379
|
-
tag "calendar:ical_link" do |tag|
|
380
|
-
options = tag.attr.dup
|
381
|
-
anchor = options['anchor'] ? "##{options.delete('anchor')}" : ''
|
382
|
-
attributes = options.inject('') { |s, (k, v)| s << %{#{k.downcase}="#{v}" } }.strip
|
383
|
-
attributes = " #{attributes}" unless attributes.empty?
|
384
|
-
text = tag.double? ? tag.expand : tag.render('calendar:name')
|
385
|
-
%{<a href="#{tag.render('calendar:ical_url')}#{anchor}"#{attributes}>#{text}</a>}
|
386
|
-
end
|
387
|
-
|
388
|
-
desc %{
|
389
|
-
Renders a small graphical link to the local .ics file for this calendar.
|
390
|
-
|
391
|
-
Usage:
|
392
|
-
<pre><code><r:calendar:ical_icon /></code></pre>
|
393
|
-
}
|
394
|
-
tag "calendar:ical_icon" do |tag|
|
395
|
-
text = tag.attr['text'] || ''
|
396
|
-
%{<a href="#{tag.render('calendar:ical_url')}" class="ical"><img src="/images/event_calendar/ical16.png" alt="subscribe to #{tag.render('calendar:name')}" width="16" height="16" /> #{text}</a>}
|
397
|
-
end
|
398
|
-
|
399
362
|
#### Event:* tags
|
400
363
|
#### display attributes of a single event
|
401
364
|
|
@@ -426,7 +389,7 @@ module EventCalendarTags
|
|
426
389
|
end
|
427
390
|
end
|
428
391
|
|
429
|
-
[:id, :title, :description, :short_description, :location, :url, :facebook_id].each do |attribute|
|
392
|
+
[:id, :title, :description, :short_description, :location, :url, :facebook_id, :facebook_url].each do |attribute|
|
430
393
|
desc %{
|
431
394
|
Renders the #{attribute} attribute of the current event.
|
432
395
|
|
@@ -459,13 +422,16 @@ module EventCalendarTags
|
|
459
422
|
end
|
460
423
|
|
461
424
|
desc %{
|
462
|
-
|
463
|
-
|
464
|
-
Usage:
|
465
|
-
<pre><code><r:facebook_url /></code></pre>
|
425
|
+
Sets the active calendar to that of the present event, if any.
|
466
426
|
}
|
467
|
-
tag "event:
|
468
|
-
tag.locals.event.
|
427
|
+
tag "event:calendar" do |tag|
|
428
|
+
if tag.locals.calendar = tag.locals.event.calendar
|
429
|
+
if tag.double?
|
430
|
+
tag.expand
|
431
|
+
else
|
432
|
+
tag.locals.calendar.name
|
433
|
+
end
|
434
|
+
end
|
469
435
|
end
|
470
436
|
|
471
437
|
desc %{
|
@@ -497,6 +463,7 @@ module EventCalendarTags
|
|
497
463
|
tag "event:facebook_link" do |tag|
|
498
464
|
if tag.locals.event.facebook_id
|
499
465
|
options = tag.attr.dup
|
466
|
+
options['class'] ||= 'facebook event'
|
500
467
|
options['title'] ||= I18n.t('event_calendar_extension.view_on_facebook')
|
501
468
|
attributes = options.inject('') { |s, (k, v)| s << %{#{k.downcase}="#{v}" } }.strip
|
502
469
|
attributes = " #{attributes}" unless attributes.empty?
|
@@ -546,8 +513,34 @@ module EventCalendarTags
|
|
546
513
|
text = tag.double? ? tag.expand : I18n.t('event_calendar_extension.tweet_this')
|
547
514
|
%{<a href="#{twitter_url}"#{attributes}>#{text}</a>}
|
548
515
|
end
|
516
|
+
|
517
|
+
desc %{
|
518
|
+
Renders the path to the local .ics file for this calendar, suitable for read-only subscription in iCal or other calendar programs.
|
519
|
+
|
520
|
+
Usage:
|
521
|
+
<pre><code><r:calendar:ical_url /></code></pre>
|
522
|
+
}
|
523
|
+
tag "calendar:ical_url" do |tag|
|
524
|
+
tag.locals.calendar.to_ics
|
525
|
+
end
|
526
|
+
|
527
|
+
desc %{
|
528
|
+
Renders a link to the ical representation of this event, which should drop the event into
|
529
|
+
a user's desktop calendar. Link attributes are passed through as usual.
|
549
530
|
|
550
|
-
|
531
|
+
Usage:
|
532
|
+
<pre><code><r:event:ical_link class="ical event" /></code></pre>
|
533
|
+
}
|
534
|
+
tag "event:ical_link" do |tag|
|
535
|
+
options = tag.attr.dup
|
536
|
+
options['title'] ||= I18n.t('event_calendar_extension.download_event')
|
537
|
+
options['class'] ||= 'ical download'
|
538
|
+
attributes = options.inject('') { |s, (k, v)| s << %{#{k.downcase}="#{v}" } }.strip
|
539
|
+
text = tag.double? ? tag.expand : I18n.t('event_calendar_extension.tweet_this')
|
540
|
+
%{<a href="#{event_path(tag.locals.event, :format => 'ics')}" #{attributes}>#{text}</a>}
|
541
|
+
end
|
542
|
+
|
543
|
+
#TODO: venues:* tags
|
551
544
|
|
552
545
|
desc %{
|
553
546
|
Renders a sensible location string, based on whatever venue information is available.
|
@@ -800,15 +793,12 @@ module EventCalendarTags
|
|
800
793
|
<pre><code><r:event:datemark /></code></pre>
|
801
794
|
}
|
802
795
|
tag "event:datemark" do |tag|
|
803
|
-
html = ""
|
804
|
-
html << _datemark(tag.locals.event.start_date)
|
805
|
-
html
|
806
|
-
end
|
807
|
-
|
808
|
-
def _datemark(date=Time.now)
|
809
796
|
%{
|
810
|
-
|
811
|
-
|
797
|
+
<div class="datemark">
|
798
|
+
<span class="dow">#{tag.locals.event.short_day}</span>
|
799
|
+
<span class="dom">#{tag.locals.event.mday}</span>
|
800
|
+
</div>
|
801
|
+
}
|
812
802
|
end
|
813
803
|
|
814
804
|
desc %{
|
@@ -818,7 +808,6 @@ module EventCalendarTags
|
|
818
808
|
|
819
809
|
Usage:
|
820
810
|
<pre><code><r:events:minimonth [year=""] [month=""] /></code></pre>
|
821
|
-
|
822
811
|
}
|
823
812
|
tag "events:minimonth" do |tag|
|
824
813
|
attr = parse_boolean_attributes(tag)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module RadiantEventCalendarExtension
|
2
|
-
VERSION = '1.5.
|
2
|
+
VERSION = '1.5.3'
|
3
3
|
SUMMARY = %Q{Event Calendar Extension for Radiant CMS}
|
4
4
|
DESCRIPTION = "An event calendar extension that administers events locally or draws them from any ical or CalDAV publishers (Google Calendar, .Mac, Darwin Calendar Server, etc.)"
|
5
5
|
URL = "http://github.com/radiant/radiant-event_calendar-extension"
|
@@ -12,12 +12,12 @@ describe EventCalendarPage do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
describe ".find_by_url" do
|
15
|
-
it "should return self to our own
|
16
|
-
pages(:calendar).
|
15
|
+
it "should return self to our own path" do
|
16
|
+
pages(:calendar).find_by_path("/#{pages(:calendar).slug}/").should == pages(:calendar)
|
17
17
|
end
|
18
18
|
|
19
|
-
it "should return self to any child
|
20
|
-
pages(:calendar).
|
19
|
+
it "should return self to any child path" do
|
20
|
+
pages(:calendar).find_by_path("/#{pages(:calendar).slug}/something").should == pages(:calendar)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -9,10 +9,9 @@ describe EventCalendarTags do
|
|
9
9
|
context "rendering event: tags" do
|
10
10
|
before do
|
11
11
|
Radiant.config['site.host'] = "test.host"
|
12
|
-
Radiant.config['event_calendar.path'] = "/test_calendar"
|
13
12
|
end
|
14
13
|
|
15
|
-
[:id, :title, :description, :short_description, :location, :url, :facebook_id].each do |tag|
|
14
|
+
[:id, :title, :description, :short_description, :location, :url, :facebook_id, :facebook_url].each do |tag|
|
16
15
|
it "event:#{tag}" do
|
17
16
|
page.should render(%{<r:event id="#{event.id}"><r:event:#{tag} /></r:event>}).as( event.send(tag.to_sym).to_s )
|
18
17
|
end
|
@@ -20,7 +19,7 @@ describe EventCalendarTags do
|
|
20
19
|
|
21
20
|
it "event:ical_link" do
|
22
21
|
page.should render(%{<r:event id="#{event.id}"><r:event:ical_link class="ical">I</r:event:ical_link></r:event>}).as(
|
23
|
-
%{<a href="/
|
22
|
+
%{<a href="/cal/events/#{event.id}.ics" title="Download event" class="ical">I</a>}
|
24
23
|
)
|
25
24
|
end
|
26
25
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: radiant-event_calendar-extension
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 5
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 5
|
9
|
-
-
|
10
|
-
version: 1.5.
|
9
|
+
- 3
|
10
|
+
version: 1.5.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Loren Johnson
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2011-
|
20
|
+
date: 2011-10-05 00:00:00 Z
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
23
|
name: ri_cal
|
@@ -182,7 +182,6 @@ files:
|
|
182
182
|
- public/stylesheets/sass/admin/event_calendar.sass
|
183
183
|
- public/stylesheets/sass/admin/event_calendar_dashboard.sass
|
184
184
|
- public/stylesheets/sass/event_calendar.sass
|
185
|
-
- radiant-event_calendar-extension-1.5.0.gem
|
186
185
|
- radiant-event_calendar-extension.gemspec
|
187
186
|
- Rakefile
|
188
187
|
- README.md
|
@@ -204,7 +203,7 @@ files:
|
|
204
203
|
homepage: http://github.com/radiant/radiant-event_calendar-extension
|
205
204
|
licenses: []
|
206
205
|
|
207
|
-
post_install_message: "\n Add this to your radiant project with:\n\n config.gem 'radiant-event_calendar-extension', :version => '~> 1.5.
|
206
|
+
post_install_message: "\n Add this to your radiant project with:\n\n config.gem 'radiant-event_calendar-extension', :version => '~> 1.5.3'\n\n "
|
208
207
|
rdoc_options: []
|
209
208
|
|
210
209
|
require_paths:
|
Binary file
|