social_stream 0.20.2 → 0.21.0
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/base/app/assets/images/btn/permission_negative.png +0 -0
- data/base/app/assets/images/btn/permission_positive.png +0 -0
- data/base/app/assets/javascripts/activities.js.erb +2 -118
- data/base/app/assets/javascripts/social_stream-base.js +3 -0
- data/base/app/assets/javascripts/social_stream.timeline.js +42 -0
- data/base/app/assets/javascripts/social_stream.wall.js.erb +125 -0
- data/base/app/assets/stylesheets/cheesecake.css.scss +9 -1
- data/base/app/helpers/notifications_helper.rb +1 -5
- data/base/app/models/activity.rb +21 -2
- data/base/app/models/comment.rb +5 -0
- data/base/app/models/permission.rb +16 -1
- data/base/app/models/post.rb +5 -0
- data/base/app/views/activities/_new.html.erb +7 -6
- data/base/app/views/activities/_wall.html.erb +6 -0
- data/base/app/views/cheesecake/_index.html.erb +17 -0
- data/base/app/views/cheesecake/_sector_form.html.erb +15 -6
- data/base/app/views/comments/_new.html.erb +2 -2
- data/base/app/views/comments/create.js.erb +1 -3
- data/base/app/views/notifications/activities/_post.html.erb +0 -3
- data/base/app/views/permissions/_index.html.erb +2 -2
- data/base/app/views/posts/create.js.erb +1 -4
- data/base/config/locales/en.yml +33 -23
- data/base/config/locales/es.yml +53 -24
- data/base/db/migrate/20120208135718_group_title_and_description_in_activity_object.rb +52 -0
- data/base/lib/social_stream/base/version.rb +1 -1
- data/base/spec/factories/activity.rb +1 -1
- data/documents/db/migrate/20120208143721_documents_group_title_and_description_in_activity_object.rb +28 -0
- data/documents/lib/social_stream/documents/version.rb +1 -1
- data/documents/social_stream-documents.gemspec +1 -1
- data/documents/spec/factories/document.rb +1 -0
- data/documents/spec/factories/picture.rb +1 -0
- data/events/db/migrate/20120208143756_events_group_title_and_description_in_activity_object.rb +26 -0
- data/events/lib/social_stream/events/version.rb +1 -1
- data/events/social_stream-events.gemspec +1 -1
- data/lib/social_stream/version.rb +1 -1
- data/linkser/app/views/links/create.js.erb +1 -3
- data/linkser/db/migrate/20120208143739_linkser_group_title_and_description_in_activity_object.rb +30 -0
- data/linkser/lib/social_stream/linkser/version.rb +1 -1
- data/linkser/social_stream-linkser.gemspec +1 -1
- data/presence/app/assets/images/black_arrow7.png +0 -0
- data/presence/app/assets/images/black_arrow8.png +0 -0
- data/presence/app/assets/images/black_arrow9.png +0 -0
- data/presence/app/assets/javascripts/chat_interface_manager.js.erb +191 -23
- data/presence/app/assets/javascripts/chat_persistence.js +15 -6
- data/presence/app/assets/javascripts/chat_utilities.js +13 -0
- data/presence/app/assets/javascripts/chat_window_manager.js +101 -20
- data/presence/app/assets/javascripts/social_stream-presence.js +2 -0
- data/presence/app/assets/javascripts/xmpp_client_management.js.erb +6 -5
- data/presence/app/assets/stylesheets/chat.css.scss +43 -3
- data/presence/app/assets/stylesheets/social_stream-presence.css +1 -0
- data/presence/app/helpers/xmpp_helper.rb +4 -2
- data/presence/app/views/chat/_contacts.html.erb +55 -42
- data/presence/config/locales/en.yml +4 -1
- data/presence/config/locales/es.yml +3 -1
- data/presence/db/migrate/20110928135031_add_status_column_to_user.rb +1 -1
- data/presence/lib/social_stream/presence/version.rb +1 -1
- data/presence/social_stream-presence.gemspec +1 -1
- data/presence/vendor/assets/javascripts/jquery.flexselect.js +265 -0
- data/presence/vendor/assets/javascripts/jquery.tools.tooltip.js +2 -1
- data/presence/vendor/assets/javascripts/liquidmetal.js +90 -0
- data/presence/vendor/assets/stylesheets/flexselect.css +39 -0
- data/social_stream.gemspec +5 -5
- metadata +45 -32
- data/base/app/views/activities/_filter.html.erb +0 -83
Binary file
|
Binary file
|
@@ -1,106 +1,9 @@
|
|
1
1
|
//= require jquery.livequery
|
2
2
|
//= require jquery.tipsy
|
3
3
|
//
|
4
|
+
//= require social_stream.wall
|
5
|
+
//
|
4
6
|
//initial state
|
5
|
-
var default_security_width = '100px';
|
6
|
-
$(function() {
|
7
|
-
$('#wrapper_activities_header form').hide();
|
8
|
-
$('#new_<%= SocialStream.activity_forms.first %>').show();
|
9
|
-
$('#select_<%= SocialStream.activity_forms.first %>').addClass('selected');
|
10
|
-
chosen = $('#security').security_chosen();
|
11
|
-
$('#security').change(function() {
|
12
|
-
$(this).children("option:selected").each(function(i,opt){
|
13
|
-
if(opt.value==relation_public){
|
14
|
-
if(public_selected==false){
|
15
|
-
public_selected = true;
|
16
|
-
for(id in relation_options){
|
17
|
-
if(id==relation_public_pos){
|
18
|
-
$("#securitychzn_o_" + relation_public_pos).click();
|
19
|
-
}else{
|
20
|
-
chosen.result_deselect(id);
|
21
|
-
}
|
22
|
-
}
|
23
|
-
chosen.results_update_field();
|
24
|
-
}else{
|
25
|
-
if($('#security').children("option:selected").size()>1){
|
26
|
-
public_selected = false;
|
27
|
-
chosen.result_deselect(relation_public_pos);
|
28
|
-
chosen.results_update_field();
|
29
|
-
}
|
30
|
-
}
|
31
|
-
}
|
32
|
-
});
|
33
|
-
|
34
|
-
$('#securities .search-choice a').click(function(){
|
35
|
-
if($('#security').children("option:selected").size()==0){
|
36
|
-
$('#securities input').css('width', default_security_width)
|
37
|
-
}
|
38
|
-
});
|
39
|
-
});
|
40
|
-
$('#securities input').blur(function(){
|
41
|
-
if($('#security').children("option:selected").size()==0){
|
42
|
-
$('#securities input').css('width', default_security_width)
|
43
|
-
}
|
44
|
-
});
|
45
|
-
// Remove width calculation
|
46
|
-
$('#securities input.default').css('width', default_security_width);
|
47
|
-
setActivityPrivacyTooltips();
|
48
|
-
});
|
49
|
-
|
50
|
-
|
51
|
-
$(document).ready(function() {
|
52
|
-
activate_anti_rebounds();
|
53
|
-
});
|
54
|
-
|
55
|
-
activate_anti_rebounds = function(){
|
56
|
-
$('#wrapper_activities_header form').submit(function() {
|
57
|
-
$(this).find('input[type=text]').each(function() {
|
58
|
-
$(this).blur().attr('readonly', true);
|
59
|
-
});
|
60
|
-
$("#masterSubmitButton").val(I18n.t('activity.sending') + '...').attr("disabled", true);
|
61
|
-
|
62
|
-
// Add _relation_ids[] parameter from authorization selector
|
63
|
-
$('.liveAdded').remove();
|
64
|
-
|
65
|
-
var currentForm = $(this);
|
66
|
-
|
67
|
-
$('#security option:selected').each(function() {
|
68
|
-
currentForm.append(
|
69
|
-
$('<input/>')
|
70
|
-
.addClass('liveAdded')
|
71
|
-
.attr('type', 'hidden')
|
72
|
-
.attr('name', currentForm
|
73
|
-
.attr('id').split('_')[1]+'[_relation_ids][]')
|
74
|
-
.val($(this).attr('value')));
|
75
|
-
});
|
76
|
-
return true;
|
77
|
-
});
|
78
|
-
|
79
|
-
$('.new_comment').submit(function() {
|
80
|
-
$(this).find('input[type=text]').each(function() {
|
81
|
-
$(this).blur().attr('readonly', true);
|
82
|
-
});
|
83
|
-
$(this).find(".submitActivity").each(function() {
|
84
|
-
$(this).val(I18n.t('activity.sending') + '...').attr("disabled", true);
|
85
|
-
});
|
86
|
-
return true;
|
87
|
-
});
|
88
|
-
}
|
89
|
-
|
90
|
-
|
91
|
-
unblock_all_forms = function() {
|
92
|
-
//Sharing buttons
|
93
|
-
$(".submitActivity").val(I18n.t('share')).removeAttr("disabled");
|
94
|
-
//Header activities form
|
95
|
-
$("#masterSubmitButton").val(I18n.t('share')).removeAttr("disabled");
|
96
|
-
$('#wrapper_activities_header form').find('input[type=text]').each(function() {
|
97
|
-
$(this).removeAttr("readonly").val("").blur();
|
98
|
-
});
|
99
|
-
//New comments
|
100
|
-
$('.input_new_comments').each(function() {chosen.result_deselect(0)
|
101
|
-
$(this).removeAttr("readonly").val("");
|
102
|
-
});
|
103
|
-
}
|
104
7
|
|
105
8
|
$('#masterSubmitButton').live('click',function(){
|
106
9
|
$('#wrapper_activities_header form:visible').submit();
|
@@ -229,22 +132,3 @@ $('#left_scroll img').livequery("click",function(){
|
|
229
132
|
|
230
133
|
|
231
134
|
});
|
232
|
-
|
233
|
-
setActivityPrivacyTooltips = function(activityId) {
|
234
|
-
var fullId = '.activity_audience';
|
235
|
-
var summaryId = '.activity_audience_summary';
|
236
|
-
|
237
|
-
if (activityId != undefined) {
|
238
|
-
fullId = '#' + activityId + ' ' + fullId;
|
239
|
-
summaryId = '#' + activityId + ' ' + summaryId;
|
240
|
-
}
|
241
|
-
|
242
|
-
$(fullId).hide();
|
243
|
-
$(summaryId).tipsy({
|
244
|
-
html: true,
|
245
|
-
title: function(){
|
246
|
-
return $(this).siblings('.activity_audience').html();
|
247
|
-
}
|
248
|
-
});
|
249
|
-
};
|
250
|
-
|
@@ -0,0 +1,42 @@
|
|
1
|
+
SocialStream.Timeline = (function(SS, $, undefined){
|
2
|
+
var setupCallbacks = [];
|
3
|
+
|
4
|
+
var addSetupCallback = function(callback){
|
5
|
+
setupCallbacks.push(callback);
|
6
|
+
}
|
7
|
+
|
8
|
+
var setup = function(){
|
9
|
+
$.each(setupCallbacks, function(i, callback){ callback(); });
|
10
|
+
}
|
11
|
+
|
12
|
+
var setPrivacyTooltips = function(activityId) {
|
13
|
+
var fullId = '.activity_audience';
|
14
|
+
var summaryId = '.activity_audience_summary';
|
15
|
+
|
16
|
+
if (activityId != undefined) {
|
17
|
+
fullId = '#' + activityId + ' ' + fullId;
|
18
|
+
summaryId = '#' + activityId + ' ' + summaryId;
|
19
|
+
}
|
20
|
+
|
21
|
+
$(fullId).hide();
|
22
|
+
$(summaryId).tipsy({
|
23
|
+
html: true,
|
24
|
+
title: function(){
|
25
|
+
return $(this).siblings('.activity_audience').html();
|
26
|
+
}
|
27
|
+
});
|
28
|
+
};
|
29
|
+
|
30
|
+
var newActivity = function(activityId){
|
31
|
+
setPrivacyTooltips(activityId);
|
32
|
+
SS.Wall.unblockForms();
|
33
|
+
}
|
34
|
+
|
35
|
+
addSetupCallback(setPrivacyTooltips);
|
36
|
+
|
37
|
+
return {
|
38
|
+
addSetupCallback: addSetupCallback,
|
39
|
+
setup: setup,
|
40
|
+
newActivity: newActivity
|
41
|
+
};
|
42
|
+
}) (SocialStream, jQuery);
|
@@ -0,0 +1,125 @@
|
|
1
|
+
//= require social_stream.timeline
|
2
|
+
//
|
3
|
+
SocialStream.Wall = (function(SS, $, undefined){
|
4
|
+
var setupCallbacks = [];
|
5
|
+
|
6
|
+
var addSetupCallback = function(callback){
|
7
|
+
setupCallbacks.push(callback);
|
8
|
+
}
|
9
|
+
|
10
|
+
var setup = function(){
|
11
|
+
$.each(setupCallbacks, function(i, callback){ callback(); });
|
12
|
+
}
|
13
|
+
|
14
|
+
var setupFirstForm = function(){
|
15
|
+
$('#wrapper_activities_header form').hide();
|
16
|
+
$('#new_<%= SocialStream.activity_forms.first %>').show();
|
17
|
+
$('#select_<%= SocialStream.activity_forms.first %>').addClass('selected');
|
18
|
+
}
|
19
|
+
|
20
|
+
var setupSecuritySelect = function(){
|
21
|
+
var default_security_width = '100px';
|
22
|
+
|
23
|
+
chosen = $('#security').security_chosen();
|
24
|
+
|
25
|
+
$('#security').change(function() {
|
26
|
+
$(this).children("option:selected").each(function(i,opt){
|
27
|
+
if(opt.value==relation_public){
|
28
|
+
if(public_selected==false){
|
29
|
+
public_selected = true;
|
30
|
+
for(id in relation_options){
|
31
|
+
if(id==relation_public_pos){
|
32
|
+
$("#securitychzn_o_" + relation_public_pos).click();
|
33
|
+
}else{
|
34
|
+
chosen.result_deselect(id);
|
35
|
+
}
|
36
|
+
}
|
37
|
+
chosen.results_update_field();
|
38
|
+
}else{
|
39
|
+
if($('#security').children("option:selected").size()>1){
|
40
|
+
public_selected = false;
|
41
|
+
chosen.result_deselect(relation_public_pos);
|
42
|
+
chosen.results_update_field();
|
43
|
+
}
|
44
|
+
}
|
45
|
+
}
|
46
|
+
});
|
47
|
+
|
48
|
+
$('#securities .search-choice a').click(function(){
|
49
|
+
if($('#security').children("option:selected").size()==0){
|
50
|
+
$('#securities input').css('width', default_security_width)
|
51
|
+
}
|
52
|
+
});
|
53
|
+
});
|
54
|
+
|
55
|
+
$('#securities input').blur(function(){
|
56
|
+
if($('#security').children("option:selected").size()==0){
|
57
|
+
$('#securities input').css('width', default_security_width)
|
58
|
+
}
|
59
|
+
});
|
60
|
+
|
61
|
+
// Remove width calculation
|
62
|
+
$('#securities input.default').css('width', default_security_width);
|
63
|
+
|
64
|
+
}
|
65
|
+
|
66
|
+
var activateAntiRebounds = function(){
|
67
|
+
$('#wrapper_activities_header form').submit(function() {
|
68
|
+
$(this).find('input[type=text]').each(function() {
|
69
|
+
$(this).blur().attr('readonly', true);
|
70
|
+
});
|
71
|
+
$("#masterSubmitButton").val(I18n.t('activity.sending') + '...').attr("disabled", true);
|
72
|
+
|
73
|
+
// Add _relation_ids[] parameter from authorization selector
|
74
|
+
$('.liveAdded').remove();
|
75
|
+
|
76
|
+
var currentForm = $(this);
|
77
|
+
|
78
|
+
$('#security option:selected').each(function() {
|
79
|
+
currentForm.append(
|
80
|
+
$('<input/>')
|
81
|
+
.addClass('liveAdded')
|
82
|
+
.attr('type', 'hidden')
|
83
|
+
.attr('name', currentForm
|
84
|
+
.attr('id').split('_')[1]+'[_relation_ids][]')
|
85
|
+
.val($(this).attr('value')));
|
86
|
+
});
|
87
|
+
return true;
|
88
|
+
});
|
89
|
+
|
90
|
+
$('.new_comment').submit(function() {
|
91
|
+
$(this).find('input[type=text]').each(function() {
|
92
|
+
$(this).blur().attr('readonly', true);
|
93
|
+
});
|
94
|
+
$(this).find(".submitActivity").each(function() {
|
95
|
+
$(this).val(I18n.t('activity.sending') + '...').attr("disabled", true);
|
96
|
+
});
|
97
|
+
return true;
|
98
|
+
});
|
99
|
+
}
|
100
|
+
|
101
|
+
var unblockForms = function() {
|
102
|
+
//Sharing buttons
|
103
|
+
$(".submitActivity").val(I18n.t('share')).removeAttr("disabled");
|
104
|
+
//Header activities form
|
105
|
+
$("#masterSubmitButton").val(I18n.t('share')).removeAttr("disabled");
|
106
|
+
$('#wrapper_activities_header form').find('input[type=text]').each(function() {
|
107
|
+
$(this).removeAttr("readonly").val("").blur();
|
108
|
+
});
|
109
|
+
//New comments
|
110
|
+
$('.input_new_comments').each(function() {chosen.result_deselect(0)
|
111
|
+
$(this).removeAttr("readonly").val("");
|
112
|
+
});
|
113
|
+
}
|
114
|
+
|
115
|
+
addSetupCallback(setupFirstForm);
|
116
|
+
addSetupCallback(setupSecuritySelect);
|
117
|
+
addSetupCallback(activateAntiRebounds);
|
118
|
+
|
119
|
+
return {
|
120
|
+
addSetupCallback: addSetupCallback,
|
121
|
+
setup: setup,
|
122
|
+
activateAntiRebounds: activateAntiRebounds,
|
123
|
+
unblockForms: unblockForms
|
124
|
+
};
|
125
|
+
}) (SocialStream, jQuery)
|
@@ -354,7 +354,15 @@
|
|
354
354
|
.permissions_explanation_tipsy_menu.tipsy .tipsy-inner {
|
355
355
|
max-width: 300px;
|
356
356
|
text-align: left;
|
357
|
+
padding: 5px 8px 4px 2px;
|
357
358
|
}
|
358
359
|
.permissions_explanation_tipsy_menu.tipsy .tipsy-inner .permission {
|
359
|
-
padding
|
360
|
+
padding: 4px 0px 4px 20px;
|
361
|
+
text-align: justify;
|
362
|
+
}
|
363
|
+
.permissions_explanation_tipsy_menu.tipsy .tipsy-inner .permission.positive {
|
364
|
+
background: url("btn/permission_positive.png") 0px no-repeat;
|
365
|
+
}
|
366
|
+
.permissions_explanation_tipsy_menu.tipsy .tipsy-inner .permission.negative {
|
367
|
+
background: url("btn/permission_negative.png") 0px no-repeat;
|
360
368
|
}
|
@@ -4,8 +4,6 @@ module NotificationsHelper
|
|
4
4
|
def title_of(act_obj)
|
5
5
|
if act_obj.is_a? Comment
|
6
6
|
'Re: ' + title_of(act_obj.parent_post)
|
7
|
-
elsif act_obj.is_a? Post and (not act_obj.text.nil?)
|
8
|
-
act_obj.text.truncate(30, :separator => ' ')
|
9
7
|
elsif act_obj.respond_to? :title and (not act_obj.title.nil?)
|
10
8
|
act_obj.title.truncate(30, :separator => ' ')
|
11
9
|
elsif act_obj.respond_to? :url and (not act_obj.url.nil?)
|
@@ -16,9 +14,7 @@ module NotificationsHelper
|
|
16
14
|
|
17
15
|
# An activity object description
|
18
16
|
def description_of(act_obj)
|
19
|
-
if act_obj.respond_to? :
|
20
|
-
sanitize(act_obj.text)
|
21
|
-
elsif act_obj.respond_to? :description and (not act_obj.description.nil?)
|
17
|
+
if act_obj.respond_to? :description and (not act_obj.description.nil?)
|
22
18
|
sanitize(act_obj.description)
|
23
19
|
else
|
24
20
|
I18n.t('notification.watch_it')
|
data/base/app/models/activity.rb
CHANGED
@@ -209,15 +209,34 @@ class Activity < ActiveRecord::Base
|
|
209
209
|
end
|
210
210
|
|
211
211
|
def notify
|
212
|
-
return true
|
212
|
+
return true unless notificable?
|
213
213
|
#Avaible verbs: follow, like, make-friend, post, update
|
214
214
|
|
215
|
-
if
|
215
|
+
if direct_object.is_a? Comment
|
216
|
+
participants.each do |p|
|
217
|
+
p.notify(notification_subject, "Youre not supposed to see this", self) unless p == sender
|
218
|
+
end
|
219
|
+
elsif ['like','follow','make-friend','post','update'].include? verb and !channel.reflexive?
|
216
220
|
receiver.notify(notification_subject, "Youre not supposed to see this", self)
|
217
221
|
end
|
218
222
|
true
|
219
223
|
end
|
220
224
|
|
225
|
+
# A list of participants
|
226
|
+
def participants
|
227
|
+
parts=Set.new
|
228
|
+
same_thread.map{|a| a.activity_objects.first}.each do |ao|
|
229
|
+
parts << ao.author if ao.respond_to? :author and !ao.author.nil?
|
230
|
+
end
|
231
|
+
parts
|
232
|
+
end
|
233
|
+
|
234
|
+
# This and related activities
|
235
|
+
def same_thread
|
236
|
+
return [self] if ancestry.nil?
|
237
|
+
[Activity.find(ancestry)] + Activity.find_all_by_ancestry(ancestry)
|
238
|
+
end
|
239
|
+
|
221
240
|
# Is subject allowed to perform action on this {Activity}?
|
222
241
|
def allow?(subject, action)
|
223
242
|
return false if channel.blank?
|
data/base/app/models/comment.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
class Comment < ActiveRecord::Base
|
2
2
|
include SocialStream::Models::Object
|
3
3
|
|
4
|
+
alias_attribute :text, :description
|
4
5
|
validates_presence_of :text
|
5
6
|
|
6
7
|
def parent_post
|
@@ -11,4 +12,8 @@ class Comment < ActiveRecord::Base
|
|
11
12
|
self._relation_ids = Activity.find(id).relation_ids
|
12
13
|
@_activity_parent_id = id
|
13
14
|
end
|
15
|
+
|
16
|
+
def title
|
17
|
+
description.truncate(30, :separator =>' ')
|
18
|
+
end
|
14
19
|
end
|
@@ -46,7 +46,22 @@ class Permission < ActiveRecord::Base
|
|
46
46
|
# An explanation of the permissions. Type can be brief or detailed.
|
47
47
|
# If detailed, description includes more information about the relation
|
48
48
|
def description(type, options = {})
|
49
|
-
|
49
|
+
unless options[:subject].present?
|
50
|
+
raise "Now we need subject for permission description"
|
51
|
+
end
|
52
|
+
|
53
|
+
options[:name] = options[:subject].name
|
54
|
+
|
55
|
+
prefix = "permission.description"
|
56
|
+
suffix = "#{ type }.#{ action }.#{ object || "nil" }"
|
57
|
+
|
58
|
+
if options[:state]
|
59
|
+
suffix += ".#{ options[:state] }"
|
60
|
+
end
|
61
|
+
|
62
|
+
options[:default] = :"#{ prefix }.default.#{ suffix }"
|
63
|
+
|
64
|
+
I18n.t "#{ prefix }.#{ options[:subject].subject_type.underscore }.#{ suffix }",
|
50
65
|
options
|
51
66
|
end
|
52
67
|
end
|
data/base/app/models/post.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
class Post < ActiveRecord::Base
|
2
2
|
include SocialStream::Models::Object
|
3
3
|
|
4
|
+
alias_attribute :text, :description
|
4
5
|
validates_presence_of :text
|
5
6
|
|
6
7
|
define_index do
|
@@ -9,4 +10,8 @@ class Post < ActiveRecord::Base
|
|
9
10
|
has created_at
|
10
11
|
end
|
11
12
|
|
13
|
+
def title
|
14
|
+
description.truncate(30, :separator =>' ')
|
15
|
+
end
|
16
|
+
|
12
17
|
end
|