social_stream-events 0.9.1 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|