vkhater-social_stream-events 0.3.2
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/.gitignore +10 -0
- data/Gemfile +5 -0
- data/README.rdoc +3 -0
- data/Rakefile +26 -0
- data/app/assets/javascripts/0_init.js +4 -0
- data/app/assets/javascripts/events.js.coffee +66 -0
- data/app/assets/javascripts/social_stream-events.js +1 -0
- data/app/assets/stylesheets/events.css.scss +66 -0
- data/app/assets/stylesheets/social_stream-events.css +3 -0
- data/app/controllers/events_controller.rb +40 -0
- data/app/controllers/rooms_controller.rb +7 -0
- data/app/helpers/events_helper.rb +16 -0
- data/app/models/event.rb +53 -0
- data/app/models/room.rb +8 -0
- data/app/views/events/_calendar_month.erb +1 -0
- data/app/views/events/_event.html.erb +1 -0
- data/app/views/events/_new.html.erb +40 -0
- data/app/views/events/_sidebar_calendar.html.erb +34 -0
- data/app/views/events/create.js.erb +21 -0
- data/app/views/events/destroy.js.erb +1 -0
- data/app/views/events/index.html.erb +99 -0
- data/app/views/rooms/_form.html.erb +31 -0
- data/app/views/rooms/_index.html.erb +10 -0
- data/app/views/rooms/_settings.html.erb +23 -0
- data/app/views/rooms/create.js.erb +7 -0
- data/app/views/rooms/destroy.js.erb +1 -0
- data/config/locales/en.yml +35 -0
- data/config/locales/es.yml +35 -0
- data/config/routes.rb +3 -0
- data/db/migrate/20111101193523_create_events.rb +13 -0
- data/db/migrate/20111120104349_create_rooms.rb +26 -0
- data/db/migrate/20111204155637_add_scheduler.rb +33 -0
- data/db/migrate/20111218203314_change_scheduler.rb +11 -0
- data/lib/generators/social_stream/events/install_generator.rb +24 -0
- data/lib/social_stream-events.rb +27 -0
- data/lib/social_stream/events/ability.rb +13 -0
- data/lib/social_stream/events/engine.rb +29 -0
- data/lib/social_stream/events/models/actor.rb +13 -0
- data/lib/social_stream/events/version.rb +5 -0
- data/lib/social_stream/migrations/events.rb +8 -0
- data/lib/social_stream/toolbar_config/events.rb +22 -0
- data/lib/social_stream/views/settings/events.rb +18 -0
- data/lib/social_stream/views/sidebar/events.rb +15 -0
- data/social_stream-events.gemspec +24 -0
- data/vendor/assets/images/boxy-ne.png +0 -0
- data/vendor/assets/images/boxy-nw.png +0 -0
- data/vendor/assets/images/boxy-se.png +0 -0
- data/vendor/assets/images/boxy-sw.png +0 -0
- data/vendor/assets/javascripts/fullcalendar.js +5210 -0
- data/vendor/assets/javascripts/gcal.js +112 -0
- data/vendor/assets/javascripts/jquery.boxy.js +570 -0
- data/vendor/assets/javascripts/sprintf.js +183 -0
- data/vendor/assets/stylesheets/boxy.css +49 -0
- data/vendor/assets/stylesheets/fullcalendar.css +618 -0
- data/vendor/assets/stylesheets/fullcalendar.print.css +61 -0
- metadata +150 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.rdoc
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
|
4
|
+
require 'rdoc/task'
|
5
|
+
|
6
|
+
require 'rspec/core'
|
7
|
+
require 'rspec/core/rake_task'
|
8
|
+
|
9
|
+
RSpec::Core::RakeTask.new(:spec)
|
10
|
+
|
11
|
+
task :default => :spec
|
12
|
+
|
13
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
14
|
+
rdoc.rdoc_dir = 'rdoc'
|
15
|
+
rdoc.title = 'Socialstream Events'
|
16
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
17
|
+
rdoc.rdoc_files.include('README.rdoc')
|
18
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
19
|
+
end
|
20
|
+
|
21
|
+
# Modify this gem's tags
|
22
|
+
class Bundler::GemHelper
|
23
|
+
def version_tag
|
24
|
+
"events#{version}"
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# Place all the behaviors and hooks related to the matching controller here.
|
2
|
+
# All this logic will automatically be available in application.js.
|
3
|
+
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
|
4
|
+
#
|
5
|
+
#= require fullcalendar
|
6
|
+
#= require jquery.boxy
|
7
|
+
#= require sprintf
|
8
|
+
#= require scheduler
|
9
|
+
|
10
|
+
SocialStream.Events.create = (start, end, allDay) ->
|
11
|
+
title = prompt('Event Title:');
|
12
|
+
if title
|
13
|
+
$.post(SocialStream.Events.current.eventsPath,
|
14
|
+
{
|
15
|
+
event: {
|
16
|
+
title: title,
|
17
|
+
start_at: start.toString(),
|
18
|
+
end_at: end.toString(),
|
19
|
+
all_day: allDay,
|
20
|
+
_contact_id: SocialStream.Events.current.contactId
|
21
|
+
}
|
22
|
+
},
|
23
|
+
undefined,
|
24
|
+
"script");
|
25
|
+
|
26
|
+
SocialStream.Events.tools = {}
|
27
|
+
|
28
|
+
SocialStream.Events.tools.currentRGB = () ->
|
29
|
+
[ parseInt(SocialStream.Events.current.eventColor[1..2], 16),
|
30
|
+
parseInt(SocialStream.Events.current.eventColor[3..4], 16),
|
31
|
+
parseInt(SocialStream.Events.current.eventColor[5..6], 16) ]
|
32
|
+
|
33
|
+
SocialStream.Events.tools.colorRange = () ->
|
34
|
+
min = 0
|
35
|
+
|
36
|
+
for color in SocialStream.Events.tools.currentRGB()
|
37
|
+
if color < min
|
38
|
+
min = color
|
39
|
+
|
40
|
+
parseInt 2 * (255 - min) / 3
|
41
|
+
|
42
|
+
SocialStream.Events.tools.increaseColor = (delta) ->
|
43
|
+
(if (color + delta) > 255 then 255 else (color + delta)) for color in SocialStream.Events.tools.currentRGB()
|
44
|
+
|
45
|
+
|
46
|
+
SocialStream.Events.tools.eventColorScale = (index) ->
|
47
|
+
range = SocialStream.Events.tools.colorRange()
|
48
|
+
|
49
|
+
delta = range * (index + 1) / (SocialStream.Events.current.roomIndex.length + 1)
|
50
|
+
|
51
|
+
delta = parseInt(delta)
|
52
|
+
|
53
|
+
newColor = SocialStream.Events.tools.increaseColor(delta)
|
54
|
+
|
55
|
+
sprintf "#%02x%02x%02x", newColor[0], newColor[1], newColor[2]
|
56
|
+
|
57
|
+
|
58
|
+
SocialStream.Events.tools.eventColor = (roomId) ->
|
59
|
+
currentColor = SocialStream.Events.current.eventColor
|
60
|
+
|
61
|
+
if not roomId? or not SocialStream.Events.current.roomIndex? or SocialStream.Events.current.roomIndex.length == 0
|
62
|
+
return currentColor
|
63
|
+
|
64
|
+
currentRoomIndex = SocialStream.Events.current.roomIndex.indexOf(roomId)
|
65
|
+
|
66
|
+
SocialStream.Events.tools.eventColorScale(currentRoomIndex)
|
@@ -0,0 +1 @@
|
|
1
|
+
//= require_tree .
|
@@ -0,0 +1,66 @@
|
|
1
|
+
// Place all the styles related to the events controller here.
|
2
|
+
// They will automatically be included in application.css.
|
3
|
+
// You can use Sass (SCSS) here: http://sass-lang.com/
|
4
|
+
//
|
5
|
+
//= require fullcalendar
|
6
|
+
//= require boxy
|
7
|
+
|
8
|
+
@import "colors";
|
9
|
+
|
10
|
+
#calendar {
|
11
|
+
margin-top: 20px;
|
12
|
+
}
|
13
|
+
|
14
|
+
#sidebar_calendar_date {
|
15
|
+
margin-left: 5px;
|
16
|
+
}
|
17
|
+
|
18
|
+
#sidebar_calendar {
|
19
|
+
width: 100%;
|
20
|
+
text-align: center;
|
21
|
+
padding-top: 5px;
|
22
|
+
border-top: thin solid $separation-color;
|
23
|
+
border-bottom: thin solid $separation-color;
|
24
|
+
}
|
25
|
+
|
26
|
+
#sidebar_calendar a {
|
27
|
+
color: black;
|
28
|
+
}
|
29
|
+
|
30
|
+
#sidebar_calendar td {
|
31
|
+
height: 25px;
|
32
|
+
}
|
33
|
+
|
34
|
+
#sidebar_calendar td.past {
|
35
|
+
opacity: 0.2;
|
36
|
+
}
|
37
|
+
|
38
|
+
#sidebar_calendar td.today {
|
39
|
+
border: 1px solid $sentence-color;
|
40
|
+
}
|
41
|
+
|
42
|
+
#sidebar_calendar td.next_month {
|
43
|
+
opacity: 0.8;
|
44
|
+
background-color: #F2F2F2;
|
45
|
+
}
|
46
|
+
|
47
|
+
.sidebar_calendar_month {
|
48
|
+
text-align: center;
|
49
|
+
padding: 5px;
|
50
|
+
}
|
51
|
+
|
52
|
+
.sidebar_calendar_month a {
|
53
|
+
color: $sentence-color;
|
54
|
+
}
|
55
|
+
|
56
|
+
.sidebar_calendar_month.not_current a {
|
57
|
+
color: $details-color;
|
58
|
+
}
|
59
|
+
|
60
|
+
#new_event div.form_row {
|
61
|
+
padding: 3px 0;
|
62
|
+
}
|
63
|
+
|
64
|
+
#scheduler-options {
|
65
|
+
padding: 2px 10px;
|
66
|
+
}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class EventsController < ApplicationController
|
2
|
+
include SocialStream::Controllers::Objects
|
3
|
+
|
4
|
+
belongs_to_subjects :optional => true
|
5
|
+
|
6
|
+
before_filter :profile_subject!, :only => :index
|
7
|
+
|
8
|
+
def index
|
9
|
+
index! do |format|
|
10
|
+
format.json {
|
11
|
+
start_time = Time.at(params[:start].to_i)
|
12
|
+
end_time = Time.at(params[:end].to_i)
|
13
|
+
@activities =
|
14
|
+
collection.
|
15
|
+
joins(:activity_objects => :event).
|
16
|
+
merge(Event.between(start_time, end_time))
|
17
|
+
|
18
|
+
render :json =>
|
19
|
+
@activities.
|
20
|
+
map(&:direct_object).
|
21
|
+
map{ |e| e.to_json(:start => start_time, :end => end_time) }.flatten.to_json
|
22
|
+
}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def show
|
27
|
+
show! do |format|
|
28
|
+
format.html { redirect_to polymorphic_path([ @event.post_activity.receiver_subject, Event.new ], :at => @event.start_at.to_i) }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def collection
|
35
|
+
@activities =
|
36
|
+
profile_subject.wall(:profile,
|
37
|
+
:for => current_subject,
|
38
|
+
:object_type => :Event)
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module EventsHelper
|
2
|
+
def event_class(day)
|
3
|
+
[].tap { |css|
|
4
|
+
css <<
|
5
|
+
if day < Date.today
|
6
|
+
"past"
|
7
|
+
elsif day == Date.today
|
8
|
+
"today"
|
9
|
+
elsif day.month != Date.today.month
|
10
|
+
"next_month"
|
11
|
+
end
|
12
|
+
|
13
|
+
#TODO: event ocurrence
|
14
|
+
}.join(" ")
|
15
|
+
end
|
16
|
+
end
|
data/app/models/event.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
class Event < ActiveRecord::Base
|
2
|
+
include SocialStream::Models::Object
|
3
|
+
|
4
|
+
scheduler
|
5
|
+
|
6
|
+
belongs_to :room
|
7
|
+
|
8
|
+
validates_presence_of :title
|
9
|
+
|
10
|
+
validate :room_belongs_to_receiver
|
11
|
+
|
12
|
+
def to_json(options = {})
|
13
|
+
if recurrence
|
14
|
+
st = options[:start].try(:to_date)
|
15
|
+
en = (options[:end] || end_at.end_of_month + 7.days).to_date
|
16
|
+
|
17
|
+
recurrence.events(:starts => st, :until => en).map do |d|
|
18
|
+
|
19
|
+
start_diff = d - start_at.to_date
|
20
|
+
end_diff = d - end_at.to_date
|
21
|
+
|
22
|
+
build_json start_at.advance(:days => start_diff),
|
23
|
+
end_at.advance(:days => end_diff)
|
24
|
+
end
|
25
|
+
else
|
26
|
+
build_json
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
protected
|
31
|
+
|
32
|
+
def build_json(start_time = start_at, end_time = end_at)
|
33
|
+
{
|
34
|
+
:id => id,
|
35
|
+
:title => title,
|
36
|
+
:start => start_time,
|
37
|
+
:end => end_time,
|
38
|
+
:allDay => all_day?,
|
39
|
+
:roomId => room_id
|
40
|
+
}
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def room_belongs_to_receiver
|
47
|
+
return if room_id.blank?
|
48
|
+
|
49
|
+
unless _contact.receiver.room_ids.include?(room_id)
|
50
|
+
errors.add(:room_id, :invalid)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/app/models/room.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
<div id="sidebar_calendar_month_<%= position %>" class="sidebar_calendar_month<%= " not_current" if date.month != Date.today.month %>"><%= link_to l(date, :format => "%B %Y"), polymorphic_path([profile_or_current_subject, Event.new], :date => date.to_time.to_i) %></div>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= raw t('event.wall_post', :title => link_to(h(event.title), event)) %>
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<%= form_for @event || Event.new(:owner_id => profile_subject.actor_id, :interval => 1), :remote => true do |f| %>
|
2
|
+
<%= f.hidden_field :owner_id %>
|
3
|
+
<%= f.hidden_field :start_at %>
|
4
|
+
<%= f.hidden_field :end_at %>
|
5
|
+
<%= f.hidden_field :all_day %>
|
6
|
+
|
7
|
+
<% if f.object.errors.any? %>
|
8
|
+
<div id="error_explanation">
|
9
|
+
<h2><%= pluralize(f.object.errors.count, "error") %> evitaron que se guardara esta actividad:</h2>
|
10
|
+
|
11
|
+
<ul>
|
12
|
+
<% f.object.errors.full_messages.each do |msg| %>
|
13
|
+
<li><%= msg %></li>
|
14
|
+
<% end %>
|
15
|
+
</ul>
|
16
|
+
</div>
|
17
|
+
<% end %>
|
18
|
+
|
19
|
+
<div class="form_row">
|
20
|
+
<%= f.label :title %>
|
21
|
+
<%= f.text_field :title %>
|
22
|
+
</div>
|
23
|
+
|
24
|
+
<% if profile_subject.rooms.any? %>
|
25
|
+
<div class="form_row">
|
26
|
+
<%= f.label :room %>
|
27
|
+
<%= f.select :room_id, profile_subject.rooms.map{ |r| [r.name, r.id] }, { :include_blank => true } %>
|
28
|
+
</div>
|
29
|
+
<% end %>
|
30
|
+
|
31
|
+
<div class="form_row">
|
32
|
+
<%= render :partial => 'scheduler/form',
|
33
|
+
:locals => { :f => f }
|
34
|
+
%>
|
35
|
+
</div>
|
36
|
+
|
37
|
+
<div class="form_row space_center">
|
38
|
+
<%= f.submit %>
|
39
|
+
</div>
|
40
|
+
<% end %>
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<div class="space_center"></div>
|
2
|
+
|
3
|
+
<div class="block">
|
4
|
+
<div class="content">
|
5
|
+
|
6
|
+
<%= render :partial => 'events/calendar_month',
|
7
|
+
:locals => {
|
8
|
+
:position => :top,
|
9
|
+
:date => Date.today.beginning_of_week
|
10
|
+
} %>
|
11
|
+
|
12
|
+
<table id="sidebar_calendar">
|
13
|
+
<% bow = Time.now.beginning_of_week %>
|
14
|
+
|
15
|
+
<% 28.times do |i| %>
|
16
|
+
<% day = bow + i.days %>
|
17
|
+
|
18
|
+
<%= raw cycle(*(Array.wrap("<tr>") + 6.times.map{""}) + Array.wrap(:name => "tr_start")) %>
|
19
|
+
<td class="<%= event_class(day.to_date) %>">
|
20
|
+
<%= link_to day.day, polymorphic_path([profile_or_current_subject, Event.new], :date => day.to_i, :view => "agendaDay") %>
|
21
|
+
</td>
|
22
|
+
|
23
|
+
<%= raw cycle(*(6.times.map{""} + Array.wrap('</tr>') + Array.wrap(:name => "tr_end"))) %>
|
24
|
+
<% end %>
|
25
|
+
</table>
|
26
|
+
|
27
|
+
<%= render :partial => 'events/calendar_month',
|
28
|
+
:locals => {
|
29
|
+
:position => :bottom,
|
30
|
+
:date => Date.today.beginning_of_week + 28
|
31
|
+
} %>
|
32
|
+
|
33
|
+
</div>
|
34
|
+
</div>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<% if @event.valid? %>
|
2
|
+
SocialStream.Events.current.newForm.unload();
|
3
|
+
|
4
|
+
var cal = SocialStream.Events.current.calendar;
|
5
|
+
|
6
|
+
jQuery.each(<%= raw Array.wrap(@event.to_json).to_json %>,
|
7
|
+
function(index, ev) {
|
8
|
+
ev.color = SocialStream.Events.tools.eventColor(<%= @event.room_id %>);
|
9
|
+
|
10
|
+
cal.fullCalendar('renderEvent', ev,
|
11
|
+
true // make the event "stick"
|
12
|
+
);
|
13
|
+
});
|
14
|
+
|
15
|
+
cal.fullCalendar('unselect');
|
16
|
+
|
17
|
+
<% else %>
|
18
|
+
SocialStream.Events.current.newForm.setContent("<%= escape_javascript render(:partial => 'new') %>");
|
19
|
+
|
20
|
+
Scheduler.form.init(SocialStream.Events.current.newForm.getContent().find('.scheduler_form'));
|
21
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render(:partial => 'objects/destroy') %>
|
@@ -0,0 +1,99 @@
|
|
1
|
+
<% content_for :headers do %>
|
2
|
+
<style type="text/css">
|
3
|
+
#sidebar {width: 0px;}
|
4
|
+
#center_body {width: 780px; max-width: 780px; border-right: 0px;}
|
5
|
+
</style>
|
6
|
+
<% end %>
|
7
|
+
|
8
|
+
<% content_for :title do %>
|
9
|
+
<%= profile_subject.name + ": " + t('event.title') %>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<%= location(
|
13
|
+
link_to(profile_subject.name, polymorphic_path(profile_subject)),
|
14
|
+
link_to(t('event.title'), polymorphic_path([profile_subject, Event.new]))
|
15
|
+
) %>
|
16
|
+
|
17
|
+
<% toolbar :profile => profile_subject %>
|
18
|
+
|
19
|
+
<div id="calendar"></div>
|
20
|
+
|
21
|
+
<%= javascript_tag do %>
|
22
|
+
$(function(){
|
23
|
+
|
24
|
+
<% if profile_subject.respond_to? :rooms %>
|
25
|
+
SocialStream.Events.current.roomIndex = <%= raw profile_subject.rooms.map(&:id) %>;
|
26
|
+
<% end %>
|
27
|
+
|
28
|
+
SocialStream.Events.current.eventColor = '#58310E';
|
29
|
+
|
30
|
+
SocialStream.Events.current.calendar = $('#calendar').fullCalendar({
|
31
|
+
header: {
|
32
|
+
left: 'prev,next today',
|
33
|
+
center: 'title',
|
34
|
+
right: 'month,agendaWeek,agendaDay'
|
35
|
+
},
|
36
|
+
firstDay: 1,
|
37
|
+
eventColor: SocialStream.Events.current.eventColor,
|
38
|
+
<% if can? :create, new_post(profile_subject) %>
|
39
|
+
selectable: true,
|
40
|
+
selectHelper: true,
|
41
|
+
select: function(startDate, endDate, allDay, jsEvent){
|
42
|
+
|
43
|
+
SocialStream.Events.current.newForm = new Boxy(
|
44
|
+
"<%= escape_javascript render(:partial => 'events/new') %>",
|
45
|
+
{
|
46
|
+
title: "<%= t('event.new.title') %>",
|
47
|
+
closeable: true,
|
48
|
+
closeText: "<%= t('boxy.close_text') %>",
|
49
|
+
draggable: true
|
50
|
+
}
|
51
|
+
);
|
52
|
+
|
53
|
+
|
54
|
+
SocialStream.Events.current.newForm.moveTo(jsEvent.clientX, jsEvent.clientY);
|
55
|
+
|
56
|
+
var c = SocialStream.Events.current.newForm.getContent();
|
57
|
+
|
58
|
+
c.children('#event_start_at').val(startDate.toJSON());
|
59
|
+
c.children('#event_end_at').val(endDate.toJSON());
|
60
|
+
c.children('#event_all_day').val(allDay.toString());
|
61
|
+
|
62
|
+
// From rails-scheduler gem
|
63
|
+
Scheduler.form.init(c.find('.scheduler_form'), startDate);
|
64
|
+
},
|
65
|
+
<% end %>
|
66
|
+
// Implement event edition
|
67
|
+
// editable: true,
|
68
|
+
events: function(start, end, callback) {
|
69
|
+
$.ajax({
|
70
|
+
url: "<%= escape_javascript polymorphic_path([profile_subject, Event.new]) %>",
|
71
|
+
dataType: 'json',
|
72
|
+
data: {
|
73
|
+
// our hypothetical feed requires UNIX timestamps
|
74
|
+
start: Math.round(start.getTime() / 1000),
|
75
|
+
end: Math.round(end.getTime() / 1000)
|
76
|
+
},
|
77
|
+
success: function(events) {
|
78
|
+
callback(
|
79
|
+
$.map(events, function(event) {
|
80
|
+
event.color = SocialStream.Events.tools.eventColor(event.roomId);
|
81
|
+
return event;
|
82
|
+
}
|
83
|
+
)
|
84
|
+
);
|
85
|
+
}
|
86
|
+
});
|
87
|
+
}
|
88
|
+
});
|
89
|
+
|
90
|
+
<% if params[:date] %>
|
91
|
+
// TODO: optimize this to save one index call
|
92
|
+
SocialStream.Events.current.calendar.fullCalendar('gotoDate', new Date(<%= escape_javascript params[:date] %> * 1000));
|
93
|
+
<% end %>
|
94
|
+
|
95
|
+
<% if params[:view] %>
|
96
|
+
SocialStream.Events.current.calendar.fullCalendar('changeView', "<%= escape_javascript params[:view] %>");
|
97
|
+
<% end %>
|
98
|
+
});
|
99
|
+
<% end %>
|