social_stream-events 0.9.1 → 0.9.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/app/assets/javascripts/social_stream-events.js +2 -0
- data/app/assets/javascripts/social_stream.calendar.js.erb +98 -0
- data/app/assets/javascripts/social_stream.event.js +17 -0
- data/app/assets/javascripts/social_stream.events.poster.js +1 -0
- data/app/assets/javascripts/{events.js.coffee → social_stream.events.tools.js.coffee} +0 -16
- data/app/assets/stylesheets/events.css.scss +33 -0
- data/app/controllers/events_controller.rb +19 -9
- data/app/views/events/_event.html.erb +5 -0
- data/app/views/events/_sidebar_calendar.html.erb +6 -28
- data/app/views/events/index.js.erb +3 -0
- data/app/views/rooms/_form.html.erb +1 -1
- data/app/views/rooms/create.js.erb +1 -1
- data/lib/social_stream/events/version.rb +1 -1
- data/social_stream-events.gemspec +1 -1
- metadata +15 -12
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
//= require jquery.tipsy
|
|
2
|
+
|
|
3
|
+
SocialStream.Calendar = (function(SS, $, undefined){
|
|
4
|
+
var elementRegExp = new RegExp('sidebar_day_(..?)_(..?)_(..?.?.?)');
|
|
5
|
+
var eventsPath;
|
|
6
|
+
|
|
7
|
+
var elementMatch = function(el){
|
|
8
|
+
return elementRegExp.exec(el.id);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
var elementDate = function(el) {
|
|
12
|
+
var m = elementMatch(el);
|
|
13
|
+
|
|
14
|
+
if(m == null) return;
|
|
15
|
+
|
|
16
|
+
return new Date(m[3], (m[2]-1), m[1], 23, 59, 59);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
var eventElement = function(date) {
|
|
20
|
+
return $('#sidebar_day_' + date.getDate() + '_' + (date.getMonth()+1) + '_' + date.getFullYear())
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
var init = function(options){
|
|
24
|
+
eventsPath = options["eventsPath"]
|
|
25
|
+
|
|
26
|
+
var now = new Date();
|
|
27
|
+
|
|
28
|
+
eventElement(now).addClass('today');
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
$('#sidebar_calendar td').each(function(index, domEl){
|
|
32
|
+
var d = elementDate(domEl)
|
|
33
|
+
|
|
34
|
+
if(d < now) $(domEl).addClass('past');
|
|
35
|
+
if(d.getMonth() != now.getMonth() && d > now) $(domEl).addClass('next_month');
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
$.ajax({
|
|
39
|
+
dataType: 'json',
|
|
40
|
+
cache: false,
|
|
41
|
+
url: eventsPath,
|
|
42
|
+
data: {
|
|
43
|
+
start: options["start"],
|
|
44
|
+
end: options["end"]
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
success: initBusyEvents
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
var initBusyEvents = function(events) {
|
|
52
|
+
$.map(events, function(event) {
|
|
53
|
+
var start = new Date(event.start); // This applies TZ
|
|
54
|
+
var end = new Date(event.end);
|
|
55
|
+
|
|
56
|
+
for(loopTime=start.getTime(); loopTime <= end.getTime(); loopTime+=86400000) {
|
|
57
|
+
var d = new Date(loopTime);
|
|
58
|
+
var domEl = eventElement(d);
|
|
59
|
+
|
|
60
|
+
domEl.addClass("busy");
|
|
61
|
+
domEl.tipsy({
|
|
62
|
+
title: busyTipsy,
|
|
63
|
+
html: true,
|
|
64
|
+
fade: true,
|
|
65
|
+
hoverable: true,
|
|
66
|
+
gravity: 'ne',
|
|
67
|
+
opacity: 0.95
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
})
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
var busyTipsy = function(){
|
|
74
|
+
var startDate = elementDate(this)
|
|
75
|
+
startDate.setHours(0);
|
|
76
|
+
startDate.setMinutes(0);
|
|
77
|
+
startDate.setSeconds(0);
|
|
78
|
+
var endDate = elementDate(this)
|
|
79
|
+
|
|
80
|
+
$.ajax({
|
|
81
|
+
dataType: "script",
|
|
82
|
+
url: eventsPath,
|
|
83
|
+
data: {
|
|
84
|
+
// use UNIX timestamps
|
|
85
|
+
start: Math.round(startDate.getTime() / 1000),
|
|
86
|
+
end: Math.round(endDate.getTime() / 1000),
|
|
87
|
+
tipsy: this.id
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
return '<div id="tipsy-' + this.id + '" class="tipsy-sidebar_calendar"><img src="<%= asset_path('loading.gif') %>"></div>';
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
init: init
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
})(SocialStream, jQuery);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
SocialStream.Event = (function(SS, $, undefined) {
|
|
2
|
+
var indexCallbacks = [];
|
|
3
|
+
|
|
4
|
+
var addIndexCallback = function(callback){
|
|
5
|
+
indexCallbacks.push(callback);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
var index = function(){
|
|
9
|
+
$.each(indexCallbacks, function(i, callback){ callback(); });
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
return {
|
|
13
|
+
addIndexCallback: addIndexCallback,
|
|
14
|
+
index: index
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
})(SocialStream, jQuery);
|
|
@@ -7,22 +7,6 @@
|
|
|
7
7
|
#= require sprintf
|
|
8
8
|
#= require scheduler
|
|
9
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
10
|
SocialStream.Events.tools = {}
|
|
27
11
|
|
|
28
12
|
SocialStream.Events.tools.currentRGB = () ->
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
//
|
|
5
5
|
//= require fullcalendar
|
|
6
6
|
//= require boxy
|
|
7
|
+
//= require tipsy
|
|
7
8
|
|
|
8
9
|
@import "colors";
|
|
9
10
|
|
|
@@ -95,6 +96,7 @@ div.event_date {
|
|
|
95
96
|
|
|
96
97
|
#sidebar_calendar td {
|
|
97
98
|
height: 25px;
|
|
99
|
+
padding: 1px;
|
|
98
100
|
}
|
|
99
101
|
|
|
100
102
|
#sidebar_calendar td.past {
|
|
@@ -113,6 +115,23 @@ div.event_date {
|
|
|
113
115
|
#sidebar_calendar td.busy {
|
|
114
116
|
font-weight: bold;
|
|
115
117
|
}
|
|
118
|
+
|
|
119
|
+
#sidebar_calendar td.busy:hover {
|
|
120
|
+
font-weight: bold;
|
|
121
|
+
color: $main-color;
|
|
122
|
+
background: $secondary-color;
|
|
123
|
+
border: $main-color 1px solid;
|
|
124
|
+
padding: 0px;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
#sidebar_calendar td.busy.today {
|
|
128
|
+
padding: 0px;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
#sidebar_calendar td.busy:hover a {
|
|
132
|
+
color: $main-color;
|
|
133
|
+
}
|
|
134
|
+
|
|
116
135
|
.sidebar_calendar_month {
|
|
117
136
|
text-align: center;
|
|
118
137
|
padding: 5px;
|
|
@@ -145,3 +164,17 @@ div.event_date {
|
|
|
145
164
|
#scheduler-options {
|
|
146
165
|
padding: 2px 10px;
|
|
147
166
|
}
|
|
167
|
+
|
|
168
|
+
.tipsy-sidebar_calendar {
|
|
169
|
+
min-width: 300px;
|
|
170
|
+
width: 300px;
|
|
171
|
+
border: solid $separation-color 1px;
|
|
172
|
+
padding: 10px;
|
|
173
|
+
background-color: #FFF;
|
|
174
|
+
opacity: 1;
|
|
175
|
+
border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.tipsy-inner {
|
|
179
|
+
max-width: 500px;
|
|
180
|
+
}
|
|
@@ -7,18 +7,16 @@ class EventsController < ApplicationController
|
|
|
7
7
|
|
|
8
8
|
def index
|
|
9
9
|
index! do |format|
|
|
10
|
+
format.js {
|
|
11
|
+
events_with_start_and_end
|
|
12
|
+
}
|
|
13
|
+
|
|
10
14
|
format.json {
|
|
11
|
-
|
|
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))
|
|
15
|
+
events_with_start_and_end
|
|
17
16
|
|
|
18
17
|
render :json =>
|
|
19
|
-
@
|
|
20
|
-
map(
|
|
21
|
-
map{ |e| e.to_json(:start => start_time, :end => end_time) }.flatten.to_json
|
|
18
|
+
@events.
|
|
19
|
+
map{ |e| e.to_json(:start => @start_time, :end => @end_time) }.flatten.to_json
|
|
22
20
|
}
|
|
23
21
|
end
|
|
24
22
|
end
|
|
@@ -37,4 +35,16 @@ class EventsController < ApplicationController
|
|
|
37
35
|
:for => current_subject,
|
|
38
36
|
:object_type => :Event)
|
|
39
37
|
end
|
|
38
|
+
|
|
39
|
+
def events_with_start_and_end
|
|
40
|
+
@start_time = Time.at(params[:start].to_i)
|
|
41
|
+
@end_time = Time.at(params[:end].to_i)
|
|
42
|
+
|
|
43
|
+
@activities =
|
|
44
|
+
collection.
|
|
45
|
+
joins(:activity_objects => :event).
|
|
46
|
+
merge(Event.between(@start_time, @end_time))
|
|
47
|
+
|
|
48
|
+
@events = @activities.map(&:direct_object)
|
|
49
|
+
end
|
|
40
50
|
end
|
|
@@ -26,34 +26,12 @@
|
|
|
26
26
|
</table>
|
|
27
27
|
|
|
28
28
|
<%= javascript_tag do %>
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
var d = new Date(m[3], (m[2]-1), m[1], 23, 59, 59);
|
|
36
|
-
if(d < now) $(domEl).addClass('past');
|
|
37
|
-
if(m[2] != (now.getMonth()+1) && d > now) $(domEl).addClass('next_month');
|
|
38
|
-
});
|
|
39
|
-
$.ajax({
|
|
40
|
-
dataType: 'json',
|
|
41
|
-
cache: false,
|
|
42
|
-
url: "<%= escape_javascript polymorphic_path([@current_subject, Event.new]) %>",
|
|
43
|
-
data: {
|
|
44
|
-
start: <%= bow.to_i %>,
|
|
45
|
-
end: <%= (bow + 28.days).to_i %>
|
|
46
|
-
},
|
|
47
|
-
success: function(events) {
|
|
48
|
-
$.map(events, function(event) {
|
|
49
|
-
var start = new Date(event.start); // This applies TZ
|
|
50
|
-
var end = new Date(event.end);
|
|
51
|
-
for(loopTime=start.getTime(); loopTime <= end.getTime(); loopTime+=86400000) {
|
|
52
|
-
var d = new Date(loopTime);
|
|
53
|
-
$('#sidebar_day_'+ d.getDate() + '_' + (d.getMonth()+1) + '_' + d.getFullYear()).addClass("busy");
|
|
54
|
-
}
|
|
55
|
-
})
|
|
56
|
-
}
|
|
29
|
+
$(function(){
|
|
30
|
+
SocialStream.Calendar.init({
|
|
31
|
+
eventsPath: "<%= escape_javascript polymorphic_path([@current_subject, Event.new]) %>",
|
|
32
|
+
start: "<%= bow.to_i %>",
|
|
33
|
+
end: "<%= (bow + 28.days).to_i %>"
|
|
34
|
+
});
|
|
57
35
|
});
|
|
58
36
|
<% end %>
|
|
59
37
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<% if @room.valid? %>
|
|
2
2
|
$('#rooms').replaceWith("<%= escape_javascript render(:partial => 'index') %>");
|
|
3
3
|
$('#room_name').val("");
|
|
4
|
-
$('#room_name').
|
|
4
|
+
$('#room_name').watermark("<%= escape_javascript t('room.watermark.name') %>");
|
|
5
5
|
<% else %>
|
|
6
6
|
$('#new_room').replaceWith("<%= escape_javascript render(:partial => 'form') %>");
|
|
7
7
|
<% end %>
|
|
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
|
|
|
12
12
|
s.files = `git ls-files`.split("\n")
|
|
13
13
|
|
|
14
14
|
# Gem dependencies
|
|
15
|
-
s.add_runtime_dependency('social_stream-base', '~> 0.17.
|
|
15
|
+
s.add_runtime_dependency('social_stream-base', '~> 0.17.2')
|
|
16
16
|
s.add_runtime_dependency('rails-scheduler', '~> 0.0.6')
|
|
17
17
|
s.add_runtime_dependency('coffee-rails', '>= 3.1.0')
|
|
18
18
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: social_stream-events
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.9.
|
|
4
|
+
version: 0.9.2
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -10,22 +10,22 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2012-03-
|
|
13
|
+
date: 2012-03-12 00:00:00.000000000Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: social_stream-base
|
|
17
|
-
requirement: &
|
|
17
|
+
requirement: &86141060 !ruby/object:Gem::Requirement
|
|
18
18
|
none: false
|
|
19
19
|
requirements:
|
|
20
20
|
- - ~>
|
|
21
21
|
- !ruby/object:Gem::Version
|
|
22
|
-
version: 0.17.
|
|
22
|
+
version: 0.17.2
|
|
23
23
|
type: :runtime
|
|
24
24
|
prerelease: false
|
|
25
|
-
version_requirements: *
|
|
25
|
+
version_requirements: *86141060
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: rails-scheduler
|
|
28
|
-
requirement: &
|
|
28
|
+
requirement: &86140600 !ruby/object:Gem::Requirement
|
|
29
29
|
none: false
|
|
30
30
|
requirements:
|
|
31
31
|
- - ~>
|
|
@@ -33,10 +33,10 @@ dependencies:
|
|
|
33
33
|
version: 0.0.6
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
|
-
version_requirements: *
|
|
36
|
+
version_requirements: *86140600
|
|
37
37
|
- !ruby/object:Gem::Dependency
|
|
38
38
|
name: coffee-rails
|
|
39
|
-
requirement: &
|
|
39
|
+
requirement: &86140300 !ruby/object:Gem::Requirement
|
|
40
40
|
none: false
|
|
41
41
|
requirements:
|
|
42
42
|
- - ! '>='
|
|
@@ -44,10 +44,10 @@ dependencies:
|
|
|
44
44
|
version: 3.1.0
|
|
45
45
|
type: :runtime
|
|
46
46
|
prerelease: false
|
|
47
|
-
version_requirements: *
|
|
47
|
+
version_requirements: *86140300
|
|
48
48
|
- !ruby/object:Gem::Dependency
|
|
49
49
|
name: sqlite3-ruby
|
|
50
|
-
requirement: &
|
|
50
|
+
requirement: &86140030 !ruby/object:Gem::Requirement
|
|
51
51
|
none: false
|
|
52
52
|
requirements:
|
|
53
53
|
- - ! '>='
|
|
@@ -55,7 +55,7 @@ dependencies:
|
|
|
55
55
|
version: '0'
|
|
56
56
|
type: :development
|
|
57
57
|
prerelease: false
|
|
58
|
-
version_requirements: *
|
|
58
|
+
version_requirements: *86140030
|
|
59
59
|
description: ! 'Social Stream is a Ruby on Rails engine providing your application
|
|
60
60
|
with social networking features and activity streams.
|
|
61
61
|
|
|
@@ -72,9 +72,11 @@ files:
|
|
|
72
72
|
- README.rdoc
|
|
73
73
|
- Rakefile
|
|
74
74
|
- app/assets/images/poster.png
|
|
75
|
-
- app/assets/javascripts/events.js.coffee
|
|
76
75
|
- app/assets/javascripts/social_stream-events.js
|
|
76
|
+
- app/assets/javascripts/social_stream.calendar.js.erb
|
|
77
|
+
- app/assets/javascripts/social_stream.event.js
|
|
77
78
|
- app/assets/javascripts/social_stream.events.poster.js
|
|
79
|
+
- app/assets/javascripts/social_stream.events.tools.js.coffee
|
|
78
80
|
- app/assets/stylesheets/events.css.scss
|
|
79
81
|
- app/assets/stylesheets/social_stream-events.css
|
|
80
82
|
- app/controllers/events_controller.rb
|
|
@@ -92,6 +94,7 @@ files:
|
|
|
92
94
|
- app/views/events/destroy.js.erb
|
|
93
95
|
- app/views/events/edit.js.erb
|
|
94
96
|
- app/views/events/index.html.erb
|
|
97
|
+
- app/views/events/index.js.erb
|
|
95
98
|
- app/views/rooms/_form.html.erb
|
|
96
99
|
- app/views/rooms/_index.html.erb
|
|
97
100
|
- app/views/rooms/_settings.html.erb
|