social_stream-base 0.7.8 → 0.7.9
Sign up to get free protection for your applications and to get access to all the features.
- data/app/assets/images/btn/delete.png +0 -0
- data/app/assets/images/icons/favicon.ico +0 -0
- data/app/assets/javascripts/activities.js.erb +6 -0
- data/app/assets/javascripts/relation_customs.js +3 -0
- data/app/assets/stylesheets/activities.css +2 -2
- data/app/assets/stylesheets/base.css +1 -1
- data/app/assets/stylesheets/relation_customs.css +38 -31
- data/app/mailers/notification_mailer.rb +1 -1
- data/app/models/activity.rb +18 -4
- data/app/models/actor.rb +22 -12
- data/app/models/relation.rb +3 -0
- data/app/views/activities/_new.html.erb +1 -1
- data/app/views/activities/_options.html.erb +3 -0
- data/app/views/groups/_sidebar_index.html.erb +2 -2
- data/app/views/permissions/_index.html.erb +2 -3
- data/app/views/relation/customs/_list.html.erb +37 -0
- data/app/views/relation/customs/_update_rules.js.erb +5 -0
- data/app/views/relation/customs/index.html.erb +0 -10
- data/app/views/relation/customs/update.js.erb +8 -3
- data/config/locales/en.yml +8 -4
- data/lib/social_stream/base/version.rb +1 -1
- data/social_stream-base.gemspec +1 -1
- data/spec/controllers/settings_controller_spec.rb +41 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/vendor/assets/stylesheets/jqcloud.css +9 -9
- metadata +10 -7
Binary file
|
Binary file
|
@@ -34,6 +34,7 @@ function checkBoxEnable(id) {
|
|
34
34
|
};
|
35
35
|
|
36
36
|
$(':checkbox[id^="relation_custom"]:checked:not(#' + id + ')').checkBox('changeCheckStatus', false);
|
37
|
+
$('div[contain$='+id+'] div.options').show();
|
37
38
|
|
38
39
|
$.ajax({
|
39
40
|
url: "../permissions",
|
@@ -68,6 +69,8 @@ function checkBoxDisable(id) {
|
|
68
69
|
$("#permissions").html("");
|
69
70
|
$("#permissions").hide();
|
70
71
|
|
72
|
+
$('div[contain$='+id+'] div.options').hide();
|
73
|
+
|
71
74
|
break;
|
72
75
|
|
73
76
|
case "permission":
|
@@ -16,10 +16,10 @@
|
|
16
16
|
#input_activities { border-color: #0656a4; color: #2A3890; padding: 5px 5px 5px 5px;
|
17
17
|
border:1px solid #BDC7D8; width:95%;}
|
18
18
|
#activities_share_btn { text-align: right; padding: 5px 16px 0px 10px; vertical-align: middle;}
|
19
|
-
#securities{ display:inline-block; text-align:left; float: left;}
|
19
|
+
#securities{ display:inline-block; text-align:left; float: left; padding-left:5px;}
|
20
20
|
|
21
21
|
/******************* WALL - ACTIVITY ***************/
|
22
|
-
.activity { text-align:left; display: block; vertical-align: top; padding:
|
22
|
+
.activity { text-align:left; display: block; vertical-align: top; padding: 10px 0px 0px 0px;
|
23
23
|
display: inline-block; color: #000; width: 100%; font-size: 13px; color: #2A3890;}
|
24
24
|
.actor_logo { width: 38px; padding: 8px 0px 5px 5px; display: inline-block; vertical-align: top;}
|
25
25
|
.activity_content { padding: 8px 0px 0px 0px; display: inline-block; color: #000; width: 90%;}
|
@@ -46,7 +46,7 @@ label.validation_error{color: #D8000C;background-color: #FFBABA;border: 1px soli
|
|
46
46
|
/************Forms SECTION **************/
|
47
47
|
input.other_blue{ background:#497FC1; border:0px; cursor:pointer; font-size:1.0em; line-height:135%;
|
48
48
|
margin-right:4px; color:white; padding:1px;}
|
49
|
-
textarea.new_contact_text_area{
|
49
|
+
textarea.new_contact_text_area{ height: 100px; color: #2A3890;}
|
50
50
|
.colum_field_title{ text-align: center; }
|
51
51
|
.needed{color:#D8000C;font-weight: normal;}
|
52
52
|
.select_relations select{ font-size: 12px; color: white; background-color:#1F4A75;}
|
@@ -19,7 +19,8 @@ span.ui-helper-hidden {
|
|
19
19
|
display: block;
|
20
20
|
font-family: sans-serif;
|
21
21
|
padding: 2px;
|
22
|
-
margin-left:
|
22
|
+
margin-left: 10px;
|
23
|
+
float: left;
|
23
24
|
}
|
24
25
|
|
25
26
|
#relation_customs label.ui-checkbox, #permissions label.ui-checkbox {
|
@@ -46,12 +47,42 @@ span.ui-radio-state-checked-hover {
|
|
46
47
|
background-position: 0 -200px;
|
47
48
|
}
|
48
49
|
|
50
|
+
#relation_customs input {
|
51
|
+
float: left;
|
52
|
+
}
|
53
|
+
|
54
|
+
#relation_customs span {
|
55
|
+
float: left;
|
56
|
+
}
|
57
|
+
|
49
58
|
form {
|
50
59
|
overflow: hidden;
|
51
60
|
height: 1%;
|
52
61
|
margin: 0px 0;
|
53
62
|
}
|
54
63
|
|
64
|
+
#relation_customs .options {
|
65
|
+
float: right;
|
66
|
+
display: none;
|
67
|
+
}
|
68
|
+
|
69
|
+
#relation_customs .button {
|
70
|
+
margin-left: 0;
|
71
|
+
}
|
72
|
+
|
73
|
+
#cancel_new_relation_custom {
|
74
|
+
margin-right: 10px;
|
75
|
+
}
|
76
|
+
|
77
|
+
.relation_custom_name_form {
|
78
|
+
display: none;
|
79
|
+
}
|
80
|
+
|
81
|
+
.cancel_edit_relation_custom {
|
82
|
+
margin-right: 10px;
|
83
|
+
float: right;
|
84
|
+
}
|
85
|
+
|
55
86
|
.ui-helper-hidden-accessible {
|
56
87
|
position: absolute;
|
57
88
|
left: -999em;
|
@@ -78,10 +109,14 @@ form {
|
|
78
109
|
padding: 15px 20px 15px 20px;
|
79
110
|
}
|
80
111
|
|
81
|
-
|
112
|
+
#new_relation {
|
82
113
|
text-align: right;
|
83
114
|
padding: 5px 0px 5px 0px;
|
84
|
-
margin: 0px 10px 15px
|
115
|
+
margin: 0px 10px 15px 30px;
|
116
|
+
}
|
117
|
+
|
118
|
+
#new_relation_custom_input_block {
|
119
|
+
display: none;
|
85
120
|
}
|
86
121
|
|
87
122
|
input.privacy_input_new{
|
@@ -135,34 +170,6 @@ span.privacy_span_new {
|
|
135
170
|
margin: 0px 0px 0px 0px;
|
136
171
|
}
|
137
172
|
|
138
|
-
#slider-range{
|
139
|
-
height:120px;
|
140
|
-
margin-left: auto;
|
141
|
-
margin-right: auto;
|
142
|
-
background-color: #1f4a75;
|
143
|
-
}
|
144
|
-
|
145
|
-
.slider-div{
|
146
|
-
float: right;
|
147
|
-
margin-right: 5px;
|
148
|
-
}
|
149
|
-
|
150
|
-
.slider-header, .slider-footer{
|
151
|
-
text-align: center;
|
152
|
-
border: 0;
|
153
|
-
color: #1f4a75;
|
154
|
-
font-weight: bold;
|
155
|
-
width: 100%;
|
156
|
-
}
|
157
|
-
|
158
|
-
.slider-header {
|
159
|
-
margin-bottom: 10px;
|
160
|
-
}
|
161
|
-
|
162
|
-
.slider-footer {
|
163
|
-
margin-top: 10px;
|
164
|
-
}
|
165
|
-
|
166
173
|
.privacy_block_section{
|
167
174
|
margin-top: 50px;
|
168
175
|
}
|
@@ -23,7 +23,7 @@ class NotificationMailer < ActionMailer::Base
|
|
23
23
|
#subject = notifications.subject_decoded
|
24
24
|
#END OF DIFFERENCE----------------------------
|
25
25
|
subject = strip_tags(subject) unless subject.html_safe?
|
26
|
-
mail(:to => receiver.send(Mailboxer.email_method), :subject => t('mailboxer.notification_mailer.subject', :subject => subject)) do |format|
|
26
|
+
mail(:to => receiver.send(Mailboxer.email_method,notification), :subject => t('mailboxer.notification_mailer.subject', :subject => subject)) do |format|
|
27
27
|
format.text {render __method__}
|
28
28
|
format.html {render __method__}
|
29
29
|
end
|
data/app/models/activity.rb
CHANGED
@@ -160,7 +160,7 @@ class Activity < ActiveRecord::Base
|
|
160
160
|
def new_like(subject)
|
161
161
|
a = children.new :verb => "like",
|
162
162
|
:contact => subject.contact_to!(receiver),
|
163
|
-
:relation_ids =>
|
163
|
+
:relation_ids => self.relation_ids
|
164
164
|
|
165
165
|
if direct_activity_object.present?
|
166
166
|
a.activity_objects << direct_activity_object
|
@@ -267,16 +267,30 @@ class Activity < ActiveRecord::Base
|
|
267
267
|
allow?(subject, 'destroy')
|
268
268
|
end
|
269
269
|
|
270
|
+
# The {Relation} with which activity is shared
|
271
|
+
def audience_in_words(subject)
|
272
|
+
visible_relations =
|
273
|
+
relations.select{ |r| r.actor_id == Actor.normalize_id(subject) || r.is_a?(Relation::Public) }
|
274
|
+
|
275
|
+
visible_relations.present? ?
|
276
|
+
I18n.t('activity.audience.visible', :audience => visible_relations.map(&:name).join(", ")) :
|
277
|
+
I18n.t('activity.audience.hidden', :audience => relations.map(&:actor).map(&:name).join(", "))
|
278
|
+
end
|
279
|
+
|
270
280
|
private
|
271
281
|
|
272
282
|
# Before validation callback
|
273
283
|
#
|
274
284
|
# Fill the relations when posting to other subject's wall
|
275
285
|
def fill_relations
|
276
|
-
return if
|
286
|
+
return if relation_ids.present?
|
277
287
|
|
278
|
-
self.
|
279
|
-
contact.
|
288
|
+
self.relation_ids =
|
289
|
+
if contact.reflexive?
|
290
|
+
Array(receiver.relation_public.id)
|
291
|
+
else
|
292
|
+
receiver.relation_customs.allow(contact.sender, 'create', 'activity').map(&:id)
|
293
|
+
end
|
280
294
|
end
|
281
295
|
|
282
296
|
#Send notifications to actors based on proximity, interest and permissions
|
data/app/models/actor.rb
CHANGED
@@ -137,17 +137,33 @@ class Actor < ActiveRecord::Base
|
|
137
137
|
end
|
138
138
|
end
|
139
139
|
|
140
|
-
#
|
141
|
-
|
142
|
-
|
140
|
+
#Returning the email address of the model if an email should be sent for this object (Message or Notification).
|
141
|
+
#If the actor is a Group and has no email address, an array with the email of the highest rank members will be
|
142
|
+
#returned isntead.
|
143
|
+
#
|
144
|
+
#If no mail has to be sent, return nil.
|
145
|
+
def mailboxer_email(object)
|
146
|
+
#If actor has disabled the emails, return nil.
|
147
|
+
return nil if !notify_by_email
|
148
|
+
#If actor has enabled the emails and has email
|
149
|
+
return "#{name} <#{email}>" if email.present?
|
150
|
+
#If actor is a Group, has enabled emails but no mail we return the highest_rank ones.
|
143
151
|
if (group = self.subject).is_a? Group
|
144
152
|
relation = group.relation_customs.sort.first
|
145
153
|
receivers = group.contact_actors(:direction => :sent, :relations => relation)
|
146
154
|
emails = Array.new
|
147
155
|
receivers.each do |receiver|
|
148
|
-
|
156
|
+
receiver_emails = receiver.mailboxer_email(object)
|
157
|
+
case receiver_emails
|
158
|
+
when String
|
159
|
+
emails << receiver_emails
|
160
|
+
when Array
|
161
|
+
receveir_emails.each do |receveir_email|
|
162
|
+
emails << receiver_email
|
163
|
+
end
|
164
|
+
end
|
149
165
|
end
|
150
|
-
|
166
|
+
return emails
|
151
167
|
end
|
152
168
|
end
|
153
169
|
|
@@ -282,7 +298,7 @@ class Actor < ActiveRecord::Base
|
|
282
298
|
#
|
283
299
|
#
|
284
300
|
def activity_relations(subject, options = {})
|
285
|
-
return
|
301
|
+
return relation_customs if Actor.normalize(subject) == self
|
286
302
|
|
287
303
|
Array.new
|
288
304
|
end
|
@@ -404,12 +420,6 @@ class Actor < ActiveRecord::Base
|
|
404
420
|
a
|
405
421
|
end
|
406
422
|
|
407
|
-
#Returning whether an email should be sent for this object (Message or Notification).
|
408
|
-
#Required by Mailboxer gem.
|
409
|
-
def should_email?(object)
|
410
|
-
return notify_by_email
|
411
|
-
end
|
412
|
-
|
413
423
|
# Use slug as parameter
|
414
424
|
def to_param
|
415
425
|
slug
|
data/app/models/relation.rb
CHANGED
@@ -32,6 +32,9 @@ class Relation < ActiveRecord::Base
|
|
32
32
|
has_many :ties, :dependent => :destroy
|
33
33
|
has_many :contacts, :through => :ties
|
34
34
|
|
35
|
+
has_many :audiences, :dependent => :destroy
|
36
|
+
has_many :activities, :through => :audiences
|
37
|
+
|
35
38
|
scope :mode, lambda { |st, rt|
|
36
39
|
where(:sender_type => st, :receiver_type => rt)
|
37
40
|
}
|
@@ -17,7 +17,7 @@
|
|
17
17
|
</div>
|
18
18
|
|
19
19
|
<% if current_subject == receiver %>
|
20
|
-
<div id="securities"><%= select_tag :_relation_ids, options_for_select(current_subject.activity_relations(receiver).sort.map{ |r| [ r.name, r.id ] }), :id => 'security', :multiple => true, :title => t('
|
20
|
+
<div id="securities"><%= select_tag :_relation_ids, options_for_select(current_subject.activity_relations(receiver).sort.map{ |r| [ r.name, r.id ] }), :id => 'security', :multiple => true, :title => t('relation_public.name') %></div>
|
21
21
|
<% end %>
|
22
22
|
|
23
23
|
<div id="activities_share_btn">
|
@@ -1,5 +1,8 @@
|
|
1
1
|
<div class="activity_options">
|
2
2
|
<ul class="activity_options" >
|
3
|
+
<% if user_signed_in? %>
|
4
|
+
<li><div class="security"><%= image_tag('btn/btn_security.png', :title => activity.audience_in_words(current_subject)) %></div></li>
|
5
|
+
<% end %>
|
3
6
|
<li><div class="post_time_ago"><%= t('time.ago', :time => time_ago_in_words(activity.created_at)) %></div></li>
|
4
7
|
<% if activity.is_root? && user_signed_in? %>
|
5
8
|
<li><div class="verb_comment"> · <%= link_to t('activity.to_comment'), "#", :class => "to_comment" %> </div></li>
|
@@ -2,13 +2,13 @@
|
|
2
2
|
|
3
3
|
<div class="block">
|
4
4
|
<div class="header">
|
5
|
-
<%= image_tag('btn/btn_tag.png', :class => "
|
5
|
+
<%= image_tag('btn/btn_tag.png', :class => "header_icon") %>
|
6
6
|
<div class="header_text">
|
7
7
|
<%= t 'group.cloud' %>
|
8
8
|
</div>
|
9
9
|
</div>
|
10
10
|
<div id="wordcloud" class="content"></div>
|
11
|
-
</div
|
11
|
+
</div>
|
12
12
|
|
13
13
|
<%= render :partial => 'contacts/suggestions_and_pendings' %>
|
14
14
|
|
@@ -4,8 +4,6 @@
|
|
4
4
|
|
5
5
|
<p class="sectionTitle"><%= raw t('permission.of_relation.choose', :name => h(@relation.name)) %></p>
|
6
6
|
|
7
|
-
<div class="privacy_add_element"></div>
|
8
|
-
|
9
7
|
<table class="tableCheckBoxOptions">
|
10
8
|
<% default_permissions.each_with_index do |p, i| %>
|
11
9
|
<tr>
|
@@ -13,6 +11,7 @@
|
|
13
11
|
<div contain=<%= dom_id p %> class="checkboxPermissionOptionLeft">
|
14
12
|
<input id=<%= dom_id p %> optionOf="permissions" type="checkbox"/>
|
15
13
|
<label for=<%= dom_id p %>><%= p.description(:brief) %></label>
|
14
|
+
<div class="clearfloat"></div>
|
16
15
|
</div>
|
17
16
|
</td>
|
18
17
|
<% if i == 0 %>
|
@@ -28,7 +27,7 @@
|
|
28
27
|
|
29
28
|
<%= raw t('privacy.intro', :relation => h(@relation.name)) %>
|
30
29
|
|
31
|
-
<%= semantic_form_for @relation, :remote => true do |f| %>
|
30
|
+
<%= semantic_form_for @relation, :url => polymorphic_path(@relation, :section => 'rules'), :remote => true do |f| %>
|
32
31
|
<%= f.input :permissions, :as => :check_boxes, :collection => default_permissions.map{ |p| [p.description(:detailed, @relation), p.id] } %>
|
33
32
|
<%= f.submit t('button.save'), :class => 'button' %>
|
34
33
|
<% end %>
|
@@ -4,10 +4,34 @@
|
|
4
4
|
<div contain="<%= dom_id(r) %>" class="checkboxOptionLeft">
|
5
5
|
<input id=<%= dom_id(r) %> type="checkbox"/>
|
6
6
|
<label for=<%= dom_id(r) %>><%=r.name%></label>
|
7
|
+
<div class="options">
|
8
|
+
<%= link_to image_tag("btn/edit.png", :class => "menu_icon", :title => t('relation_custom.edit')), '#', :class => "relation_custom_edit_link" %>
|
9
|
+
<%= link_to image_tag("btn/delete.png", :class => "menu_icon", :title => t('relation_custom.delete')), r, :class => "relation_custom_delete_link", :method => :delete, :confirm => t('relation_custom.confirm_delete') %>
|
10
|
+
|
11
|
+
</div>
|
12
|
+
<div class="relation_custom_name_form">
|
13
|
+
<%= form_for r, :remote => true do |f| %>
|
14
|
+
<p><%= f.text_field :name, :class => "privacy_input_new", :size => 18 %></p>
|
15
|
+
<%= f.submit nil, :class => "button" %>
|
16
|
+
<button class="button cancel_edit_relation_custom" ><%= t('button.cancel') %></button>
|
17
|
+
<% end %>
|
18
|
+
</div>
|
19
|
+
<div class="clearfloat"></div>
|
7
20
|
</div>
|
8
21
|
<%= raw cycle("</td>", "</td></tr>", :name => "end_cell") %>
|
9
22
|
<% end %>
|
10
23
|
|
24
|
+
<%= raw cycle("<tr><td>", "<td>", :name => "begin_cell") %>
|
25
|
+
<div id="new_relation">
|
26
|
+
<div id="new_relation_custom_title_block">
|
27
|
+
<a href="#"><span id="new_relation_custom_title" class="privacy_span_new"><%= t('relation_custom.new') %></span></a>
|
28
|
+
</div>
|
29
|
+
<div id="new_relation_custom_input_block">
|
30
|
+
<%= render :partial => 'relation/customs/form' %>
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
<%= raw cycle("</td>", "</td></tr>", :name => "end_cell") %>
|
34
|
+
|
11
35
|
<%= raw("</tr>") if list.size.odd? %>
|
12
36
|
|
13
37
|
</table>
|
@@ -15,5 +39,18 @@
|
|
15
39
|
<%= javascript_tag do %>
|
16
40
|
$(function() {
|
17
41
|
$('input[id^="relation_custom"]').checkBox();
|
42
|
+
|
43
|
+
$('.relation_custom_edit_link').click(function() {
|
44
|
+
$(this).parent().hide();
|
45
|
+
$(this).parent().siblings('label').hide();
|
46
|
+
$(this).parent().siblings('.relation_custom_name_form').show();
|
47
|
+
});
|
48
|
+
|
49
|
+
$(".cancel_edit_relation_custom").click(function() {
|
50
|
+
$(this).parent().parent().hide();
|
51
|
+
$(this).parent().parent().siblings('label, .options').show();
|
52
|
+
|
53
|
+
return false;
|
54
|
+
});
|
18
55
|
})
|
19
56
|
<% end %>
|
@@ -7,19 +7,9 @@
|
|
7
7
|
<div id="relation_customs" class="privacy_block_section first_block_section">
|
8
8
|
<p class="sectionTitle"><%= t 'relation_custom.choose' %></p>
|
9
9
|
|
10
|
-
<div class="privacy_add_element">
|
11
|
-
<div id="new_relation_custom_title_block">
|
12
|
-
<a href="#"><span id="new_relation_custom_title" class="privacy_span_new"><%= t('relation_custom.new') %></span></a>
|
13
|
-
</div>
|
14
|
-
<div id="new_relation_custom_input_block">
|
15
|
-
<%= render :partial => 'relation/customs/form' %>
|
16
|
-
</div>
|
17
|
-
</div>
|
18
10
|
|
19
11
|
<%= javascript_tag do %>
|
20
12
|
$(function() {
|
21
|
-
$("#new_relation_custom_input_block").hide();
|
22
|
-
|
23
13
|
$("#new_relation_custom_title").click(function() {
|
24
14
|
$("#new_relation_custom_title_block").hide();
|
25
15
|
$("#new_relation_custom_input_block").show();
|
@@ -1,6 +1,11 @@
|
|
1
|
-
<% if
|
2
|
-
|
1
|
+
<% if params[:section] == 'rules' %>
|
2
|
+
<%= render :partial => 'update_rules' %>
|
3
3
|
<% else %>
|
4
|
-
|
4
|
+
var div = $('div[contain$=<%= dom_id(@custom) %>]');
|
5
|
+
div.children('label').html("<%= escape_javascript @custom.name %>");
|
6
|
+
div.children('label').show();
|
7
|
+
div.children('.options').show();
|
8
|
+
div.children('.relation_custom_name_form').hide();
|
5
9
|
<% end %>
|
6
10
|
|
11
|
+
|
data/config/locales/en.yml
CHANGED
@@ -9,14 +9,14 @@ en:
|
|
9
9
|
one: "Account"
|
10
10
|
privacy: "Privacy"
|
11
11
|
activity:
|
12
|
+
audience:
|
13
|
+
visible: "Shared with %{audience}"
|
14
|
+
hidden: "Shared with spheres of %{audience}"
|
12
15
|
confirm_delete: "Delete activity?"
|
13
16
|
delete: "Delete"
|
14
17
|
input: "What are you doing?"
|
15
18
|
last: "Last Activities"
|
16
19
|
like: "I like"
|
17
|
-
new:
|
18
|
-
security:
|
19
|
-
title: "Share with..."
|
20
20
|
one: "Activity"
|
21
21
|
other: "Activities"
|
22
22
|
title: "Activities"
|
@@ -163,6 +163,7 @@ en:
|
|
163
163
|
submit:
|
164
164
|
relation_custom:
|
165
165
|
create: "Save"
|
166
|
+
update: "Update"
|
166
167
|
home: "Home"
|
167
168
|
inbox:
|
168
169
|
one: "Inbox"
|
@@ -297,9 +298,12 @@ en:
|
|
297
298
|
one: "Product"
|
298
299
|
other: "Products"
|
299
300
|
relation_custom:
|
300
|
-
title: "Privacy & context"
|
301
301
|
choose: "1. Choose sphere"
|
302
|
+
confirm_delete: "Delete this sphere?"
|
303
|
+
delete: "Delete"
|
304
|
+
edit: "Change name"
|
302
305
|
new: "+ New sphere"
|
306
|
+
title: "Privacy & context"
|
303
307
|
relation_public:
|
304
308
|
name: "Public"
|
305
309
|
required: "* These fields are required"
|
data/social_stream-base.gemspec
CHANGED
@@ -35,7 +35,7 @@ Gem::Specification.new do |s|
|
|
35
35
|
# OAuth provider
|
36
36
|
s.add_runtime_dependency('oauth-plugin','~> 0.4.0.pre1')
|
37
37
|
# Messages
|
38
|
-
s.add_runtime_dependency('mailboxer','~> 0.
|
38
|
+
s.add_runtime_dependency('mailboxer','~> 0.5.0')
|
39
39
|
# Avatar manipulation
|
40
40
|
s.add_runtime_dependency('rmagick','~> 2.13.1')
|
41
41
|
# Tagging
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe SettingsController do
|
4
|
+
include SocialStream::TestHelpers
|
5
|
+
render_views
|
6
|
+
|
7
|
+
before do
|
8
|
+
@user = Factory(:user)
|
9
|
+
@actor = @user.actor
|
10
|
+
sign_in @user
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should render index" do
|
14
|
+
get :index
|
15
|
+
assert_response :success
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should render index after update_all" do
|
19
|
+
put :update_all
|
20
|
+
response.should redirect_to settings_path
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "Notification settings" do
|
24
|
+
it "update notification email settings to Never" do
|
25
|
+
@actor.update_attributes(:notify_by_email => true)
|
26
|
+
@actor.notify_by_email.should==true
|
27
|
+
put :update_all, :settings_section => "notifications", :notify_by_email => "never"
|
28
|
+
@actor.reload
|
29
|
+
@actor.notify_by_email.should==false
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
it "update notification email settings to Always" do
|
34
|
+
@actor.update_attributes(:notify_by_email => false)
|
35
|
+
@actor.notify_by_email.should==false
|
36
|
+
put :update_all, :settings_section => "notifications", :notify_by_email => "always"
|
37
|
+
@actor.reload
|
38
|
+
@actor.notify_by_email.should==true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
Binary file
|
@@ -3,13 +3,13 @@ div#wordcloud a { color: inherit; text-decoration: none;}
|
|
3
3
|
div#wordcloud a:hover { color: #0df;}
|
4
4
|
div#wordcloud a:hover { color: #0cf;}
|
5
5
|
div#wordcloud span { padding: 0;}
|
6
|
-
div#wordcloud span.w10 {font-size:
|
7
|
-
div#wordcloud span.w9 { font-size:
|
8
|
-
div#wordcloud span.w8 { font-size:
|
9
|
-
div#wordcloud span.w7 { font-size:
|
10
|
-
div#wordcloud span.w6 { font-size:
|
11
|
-
div#wordcloud span.w5 { font-size:
|
12
|
-
div#wordcloud span.w4 { font-size:
|
6
|
+
div#wordcloud span.w10 {font-size: 22px; color: #1F4A75;}
|
7
|
+
div#wordcloud span.w9 { font-size: 20px; color: #0cf; }
|
8
|
+
div#wordcloud span.w8 { font-size: 18px; color: #0cf; }
|
9
|
+
div#wordcloud span.w7 { font-size: 13px; color: #0cf; }
|
10
|
+
div#wordcloud span.w6 { font-size: 12px; color: #90c5f0;}
|
11
|
+
div#wordcloud span.w5 { font-size: 13px; color: #90a0dd;}
|
12
|
+
div#wordcloud span.w4 { font-size: 11px; color: #90c5f0;}
|
13
13
|
div#wordcloud span.w3 { font-size: 10px; color: #a0ddff;}
|
14
|
-
div#wordcloud span.w2 { font-size:
|
15
|
-
div#wordcloud span.w1 { font-size:
|
14
|
+
div#wordcloud span.w2 { font-size: 8px; color: #99ccee;}
|
15
|
+
div#wordcloud span.w1 { font-size: 6px; color: #aab5f0;}
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: social_stream-base
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 7
|
9
|
-
-
|
10
|
-
version: 0.7.
|
9
|
+
- 9
|
10
|
+
version: 0.7.9
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- GING - DIT - UPM
|
@@ -205,12 +205,12 @@ dependencies:
|
|
205
205
|
requirements:
|
206
206
|
- - ~>
|
207
207
|
- !ruby/object:Gem::Version
|
208
|
-
hash:
|
208
|
+
hash: 11
|
209
209
|
segments:
|
210
210
|
- 0
|
211
|
-
-
|
212
|
-
-
|
213
|
-
version: 0.
|
211
|
+
- 5
|
212
|
+
- 0
|
213
|
+
version: 0.5.0
|
214
214
|
type: :runtime
|
215
215
|
version_requirements: *id012
|
216
216
|
- !ruby/object:Gem::Dependency
|
@@ -529,6 +529,7 @@ files:
|
|
529
529
|
- app/assets/images/btn/btn_write.png
|
530
530
|
- app/assets/images/btn/close.png
|
531
531
|
- app/assets/images/btn/date.png
|
532
|
+
- app/assets/images/btn/delete.png
|
532
533
|
- app/assets/images/btn/edit.png
|
533
534
|
- app/assets/images/btn/error.png
|
534
535
|
- app/assets/images/btn/facebook.png
|
@@ -835,6 +836,7 @@ files:
|
|
835
836
|
- app/views/profiles/update.js.erb
|
836
837
|
- app/views/relation/customs/_form.html.erb
|
837
838
|
- app/views/relation/customs/_list.html.erb
|
839
|
+
- app/views/relation/customs/_update_rules.js.erb
|
838
840
|
- app/views/relation/customs/create.js.erb
|
839
841
|
- app/views/relation/customs/index.html.erb
|
840
842
|
- app/views/relation/customs/update.js.erb
|
@@ -903,6 +905,7 @@ files:
|
|
903
905
|
- spec/controllers/profiles_controller_spec.rb
|
904
906
|
- spec/controllers/relation_customs_controller_spec.rb
|
905
907
|
- spec/controllers/representations_spec.rb
|
908
|
+
- spec/controllers/settings_controller_spec.rb
|
906
909
|
- spec/controllers/subjects_controller.rb
|
907
910
|
- spec/controllers/users_controller_spec.rb
|
908
911
|
- spec/dummy/.gitignore
|