social_stream 0.19.2 → 0.19.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +1 -1
- data/README.rdoc +1 -1
- data/base/app/assets/stylesheets/cheesecake.css.scss +43 -12
- data/base/app/controllers/contacts_controller.rb +1 -1
- data/base/app/models/activity.rb +4 -1
- data/base/app/models/actor.rb +2 -14
- data/base/app/models/relation.rb +2 -4
- data/base/app/models/relation/single.rb +2 -7
- data/base/app/models/tie.rb +2 -1
- data/base/app/views/activities/_new.html.erb +1 -1
- data/base/app/views/cheesecake/_cheesecake.html.erb +170 -105
- data/base/app/views/cheesecake/_index.html.erb +45 -47
- data/base/app/views/cheesecake/_sector_form.html.erb +1 -0
- data/base/app/views/toolbar/_home.html.erb +1 -1
- data/base/config/locales/en.yml +2 -0
- data/base/config/locales/es.yml +2 -0
- data/base/config/locales/rails.es.yml +192 -0
- data/base/db/migrate/20110912074426_add_reject_relation.rb +2 -2
- data/base/db/migrate/20120201185454_singleton_single_relations.rb +46 -0
- data/base/lib/social_stream/base/version.rb +1 -1
- data/base/lib/tasks/db/populate.rake +1 -1
- data/base/spec/controllers/posts_controller_spec.rb +2 -2
- data/base/spec/factories/activity.rb +1 -1
- data/base/spec/factories/post.rb +1 -1
- data/base/spec/factories/tie.rb +3 -3
- data/base/spec/models/activity_authorization_spec.rb +3 -3
- data/base/spec/support/db.rb +3 -1
- data/documents/app/assets/images/48/{word.png → doc.png} +0 -0
- data/documents/app/assets/images/48/{excel.png → xls.png} +0 -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 -1
- data/documents/spec/factories/picture.rb +1 -1
- data/documents/spec/support/db.rb +3 -3
- data/events/app/views/events/_sidebar_calendar.html.erb +5 -5
- 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/db/migrate/20120202104549_add_links_foreign_key.rb +9 -0
- data/presence/app/assets/javascripts/chat_interface_manager.js.erb +167 -177
- data/presence/app/assets/javascripts/chat_persistence.js +194 -0
- data/presence/app/assets/javascripts/chat_utilities.js +15 -0
- data/presence/app/assets/javascripts/chat_window_manager.js +57 -1
- data/presence/app/assets/javascripts/xmpp_client_management.js.erb +191 -143
- data/presence/app/assets/stylesheets/chat.css.scss +4 -5
- data/presence/app/views/chat/_contacts.html.erb +2 -5
- data/presence/app/views/chat/_index.html.erb +46 -32
- data/presence/app/views/chat/_off.html.erb +2 -2
- data/presence/config/routes.rb +1 -1
- data/presence/lib/social_stream/presence/version.rb +1 -1
- data/presence/vendor/assets/javascripts/jquery.ui.chatbox.js +14 -11
- data/social_stream.gemspec +4 -4
- data/spec/support/db.rb +4 -4
- metadata +37 -32
data/.travis.yml
CHANGED
data/README.rdoc
CHANGED
@@ -13,6 +13,24 @@
|
|
13
13
|
float: left;
|
14
14
|
position: relative;
|
15
15
|
}
|
16
|
+
#sector_form {
|
17
|
+
float: left;
|
18
|
+
position: relative;
|
19
|
+
width: 0px;
|
20
|
+
padding: 0px;
|
21
|
+
margin: 0px;
|
22
|
+
overflow: hidden;
|
23
|
+
height: 450px;
|
24
|
+
}
|
25
|
+
#contacts_explorer {
|
26
|
+
float: right;
|
27
|
+
position: relative;
|
28
|
+
width: 300px;
|
29
|
+
padding: 0px;
|
30
|
+
margin: 0px;
|
31
|
+
overflow: hidden;
|
32
|
+
height: 450px;
|
33
|
+
}
|
16
34
|
#contacts_filter {
|
17
35
|
width: 290px;
|
18
36
|
height: 45px;
|
@@ -49,14 +67,14 @@
|
|
49
67
|
|
50
68
|
#contacts_grid {
|
51
69
|
width: 300px;
|
52
|
-
height:
|
70
|
+
height: 340px;
|
53
71
|
overflow: hidden;
|
54
72
|
position: relative;
|
55
73
|
float: left;
|
56
74
|
}
|
57
75
|
#contacts_grid_available {
|
58
76
|
width: 300px;
|
59
|
-
height:
|
77
|
+
height: 308px;
|
60
78
|
position: relative;
|
61
79
|
float: left;
|
62
80
|
overflow: auto;
|
@@ -71,13 +89,14 @@
|
|
71
89
|
text-align: center;
|
72
90
|
vertical-align: middle;
|
73
91
|
background-color: $fill-color;
|
92
|
+
z-index: 2000;
|
74
93
|
}
|
75
94
|
#contacts_save {
|
76
95
|
width: 130px;
|
77
96
|
padding-right: 5px;
|
78
97
|
height: 30px;
|
79
98
|
text-align: right;
|
80
|
-
float:
|
99
|
+
float: left;
|
81
100
|
margin-right: 20px;
|
82
101
|
}
|
83
102
|
#contacts_save_form {
|
@@ -96,7 +115,7 @@
|
|
96
115
|
#contacts_changes_button {
|
97
116
|
width: 130px;
|
98
117
|
height: 25px;
|
99
|
-
float:
|
118
|
+
float: left;
|
100
119
|
margin-top: 10px;
|
101
120
|
cursor: pointer;
|
102
121
|
}
|
@@ -163,7 +182,7 @@
|
|
163
182
|
width: 48px;
|
164
183
|
height: 48px;
|
165
184
|
float: left;
|
166
|
-
|
185
|
+
padding: 4px;
|
167
186
|
opacity: 0.8;
|
168
187
|
}
|
169
188
|
#contacts_grid .actor img {
|
@@ -172,7 +191,9 @@
|
|
172
191
|
}
|
173
192
|
#contacts_grid .actor.focused {
|
174
193
|
opacity: 1;
|
175
|
-
|
194
|
+
padding: 3px;
|
195
|
+
background: $secondary-color;
|
196
|
+
border: 1px solid $main-color;
|
176
197
|
}
|
177
198
|
#contacts_grid .actor.focused img {
|
178
199
|
|
@@ -183,14 +204,18 @@
|
|
183
204
|
width: 24px;
|
184
205
|
height: 24px;
|
185
206
|
float: left;
|
186
|
-
|
207
|
+
padding: 2px 2px 0px 2px;
|
208
|
+
background-color: $fill-color;
|
187
209
|
}
|
188
210
|
#contacts_grid_selected .actor img {
|
189
211
|
width: 24px;
|
190
212
|
height: 24px;
|
191
213
|
}
|
192
|
-
#contacts_grid_selected
|
193
|
-
|
214
|
+
#contacts_grid_selected .actor.focused {
|
215
|
+
opacity: 1;
|
216
|
+
background: $header-notification-color;
|
217
|
+
padding: 2px 2px 2px 2px;
|
218
|
+
border: 0px;
|
194
219
|
}
|
195
220
|
#contacts_grid_selected .actor.focused img {
|
196
221
|
|
@@ -198,10 +223,16 @@
|
|
198
223
|
#contacts_grid_selected {
|
199
224
|
width: 280px;
|
200
225
|
min-height: 28px;
|
201
|
-
background-color: $
|
226
|
+
background-color: $secondary-color;
|
202
227
|
border: 1px solid $main-color;
|
203
|
-
|
204
|
-
|
228
|
+
padding: 0px;
|
229
|
+
margin-bottom: 2px;
|
230
|
+
}
|
231
|
+
#contacts_grid_selected_hint {
|
232
|
+
padding-top: 5px;
|
233
|
+
margin: auto;
|
234
|
+
height: 11px;
|
235
|
+
text-align: center;
|
205
236
|
}
|
206
237
|
.cheesecake_actor_tipsy.tipsy {
|
207
238
|
padding-top: 2px;
|
data/base/app/models/activity.rb
CHANGED
@@ -228,7 +228,10 @@ class Activity < ActiveRecord::Base
|
|
228
228
|
|
229
229
|
rels = Relation.normalize(relation_ids)
|
230
230
|
|
231
|
-
own_rels
|
231
|
+
own_rels = rels.select{ |r| r.actor_id == channel.author_id }
|
232
|
+
# Consider Relation::Single as own_relations
|
233
|
+
own_rels += rels.select{ |r| r.is_a?(Relation::Single) }
|
234
|
+
|
232
235
|
foreign_rels = rels - own_rels
|
233
236
|
|
234
237
|
# Only posting to own relations or allowed to post to foreign relations
|
data/base/app/models/actor.rb
CHANGED
@@ -205,16 +205,6 @@ class Actor < ActiveRecord::Base
|
|
205
205
|
relations.joins(:relation_permissions => :permission).where('permissions.action' => 'notify')
|
206
206
|
end
|
207
207
|
|
208
|
-
# The {Relation::Public} for this {Actor}
|
209
|
-
def relation_public
|
210
|
-
Relation::Public.of(self)
|
211
|
-
end
|
212
|
-
|
213
|
-
# The {Relation::Reject} for this {Actor}
|
214
|
-
def relation_reject
|
215
|
-
Relation::Reject.of(self)
|
216
|
-
end
|
217
|
-
|
218
208
|
# All the {Actor Actors} this one has ties with:
|
219
209
|
#
|
220
210
|
# actor.contact_actors #=> array of actors that sent and receive ties from actor
|
@@ -381,7 +371,7 @@ class Actor < ActiveRecord::Base
|
|
381
371
|
#
|
382
372
|
def activity_relations(subject, options = {})
|
383
373
|
if Actor.normalize(subject) == self
|
384
|
-
return relation_customs + Array.wrap(
|
374
|
+
return relation_customs + Array.wrap(Relation::Public.instance)
|
385
375
|
else
|
386
376
|
Array.new
|
387
377
|
end
|
@@ -507,7 +497,7 @@ class Actor < ActiveRecord::Base
|
|
507
497
|
id
|
508
498
|
a = Activity.new :verb => "like",
|
509
499
|
:channel => channel,
|
510
|
-
:relation_ids => Array(
|
500
|
+
:relation_ids => Array(Relation::Public.instance.id)
|
511
501
|
|
512
502
|
a.activity_objects << activity_object
|
513
503
|
|
@@ -534,8 +524,6 @@ class Actor < ActiveRecord::Base
|
|
534
524
|
# After create callback
|
535
525
|
def create_initial_relations
|
536
526
|
Relation::Custom.defaults_for(self)
|
537
|
-
Relation::Public.default_for(self)
|
538
|
-
Relation::Reject.default_for(self)
|
539
527
|
end
|
540
528
|
|
541
529
|
# After create callback
|
data/base/app/models/relation.rb
CHANGED
@@ -55,8 +55,6 @@ class Relation < ActiveRecord::Base
|
|
55
55
|
has_many :audiences, :dependent => :destroy
|
56
56
|
has_many :activities, :through => :audiences
|
57
57
|
|
58
|
-
validates_presence_of :actor_id
|
59
|
-
|
60
58
|
scope :actor, lambda { |a|
|
61
59
|
where(:actor_id => Actor.normalize_id(a))
|
62
60
|
}
|
@@ -125,12 +123,12 @@ class Relation < ActiveRecord::Base
|
|
125
123
|
|
126
124
|
conds =
|
127
125
|
Permission.arel_table[:action].eq(action).and(Permission.arel_table[:object].eq(object))
|
128
|
-
|
129
|
-
# Relation::Public permissions cannot be customized yet
|
126
|
+
# Relation::Public permissions cannot be customized and should not depend on the subject
|
130
127
|
if action == 'read' && object == 'activity' && (options[:public].nil? || options[:public])
|
131
128
|
conds = conds.or(Relation.arel_table[:type].eq('Relation::Public'))
|
132
129
|
end
|
133
130
|
|
131
|
+
|
134
132
|
# Add in condition
|
135
133
|
if ! options[:in].nil?
|
136
134
|
conds = conds.and(Relation.arel_table[:id].in(Relation.normalize_id(Array(options[:in]))))
|
@@ -5,13 +5,8 @@
|
|
5
5
|
#
|
6
6
|
class Relation::Single < Relation
|
7
7
|
class << self
|
8
|
-
def
|
9
|
-
create!
|
10
|
-
end
|
11
|
-
|
12
|
-
# The {Relation::Public} belonging to actor
|
13
|
-
def of(actor)
|
14
|
-
actor(actor).first
|
8
|
+
def instance
|
9
|
+
first || create!
|
15
10
|
end
|
16
11
|
end
|
17
12
|
|
data/base/app/models/tie.rb
CHANGED
@@ -141,7 +141,8 @@ class Tie < ActiveRecord::Base
|
|
141
141
|
|
142
142
|
def relation_belongs_to_sender
|
143
143
|
errors.add(:relation, "must belong to sender") unless
|
144
|
-
|
144
|
+
relation.is_a?(Relation::Single) ||
|
145
|
+
contact.sender_id == relation.actor_id
|
145
146
|
end
|
146
147
|
end
|
147
148
|
|
@@ -25,7 +25,7 @@
|
|
25
25
|
<div id="securities">
|
26
26
|
<% if current_subject == receiver %>
|
27
27
|
<%= javascript_tag do %>
|
28
|
-
var relation_public = <%=
|
28
|
+
var relation_public = <%= Relation::Public.instance.id %>;
|
29
29
|
var public_selected = false;
|
30
30
|
var relation_options = <%= escape_javascript(current_subject.activity_relations(receiver).sort.map{ |r| r.id }.to_json) %>;
|
31
31
|
var relation_public_pos = 0;
|
@@ -5,121 +5,186 @@ $(function(){
|
|
5
5
|
width: 440,
|
6
6
|
height: 440
|
7
7
|
},
|
8
|
-
|
8
|
+
grid: {
|
9
9
|
id: "contacts_grid",
|
10
|
-
divIdPrefix: "actor_"
|
10
|
+
divIdPrefix: "actor_",
|
11
|
+
maxOpacity: 0.8
|
11
12
|
},
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
var changes = cheesecake.getChanges();
|
31
|
-
if((changes.actors)&&(changes.actors.length==0)&&(changes.sectors)&&(changes.sectors.length==0)&&(changes.subsectors)&&(changes.subsectors.length==0)){
|
32
|
-
$("#contacts_changes_button").hide();
|
33
|
-
$("#contacts_save").hide();
|
34
|
-
}else{
|
35
|
-
$("#contacts_changes_button").show();
|
36
|
-
$("#contacts_save").show();
|
37
|
-
var total = 0;
|
38
|
-
if(changes.actors)
|
39
|
-
total += changes.actors.length;
|
40
|
-
if(changes.sectors)
|
41
|
-
total += changes.sectors.length;
|
42
|
-
if(changes.subsectors)
|
43
|
-
total += changes.subsectors.length;
|
44
|
-
$("#contacts_changes_button_total").html(total);
|
13
|
+
colors : {
|
14
|
+
normalSector : {
|
15
|
+
background : "#DEEFF8",
|
16
|
+
border : "#1F4A75",
|
17
|
+
font : "#1F4A75",
|
18
|
+
click : "#BDC7D8",
|
19
|
+
mouseover : "#D4E4EA",
|
20
|
+
mouseup : "#DEEFF8",
|
21
|
+
mouseout : "#DEEFF8"
|
22
|
+
},
|
23
|
+
extraSector : {
|
24
|
+
background : "#879EB5",
|
25
|
+
border : "#1F4A75",
|
26
|
+
font : "#1F4A75",
|
27
|
+
click : "#97AEC5",
|
28
|
+
mouseover : "#97AEC5",
|
29
|
+
mouseup : "#879EB5",
|
30
|
+
mouseout : "#879EB5"
|
45
31
|
}
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
32
|
+
},
|
33
|
+
rMax : 200,
|
34
|
+
center: {x : 220, y : 220}
|
35
|
+
};
|
36
|
+
cheesecakeData.sectors = <%= raw(current_subject.cheesecake_json) %>.sectors;
|
37
|
+
var cheese = new socialCheesecake.Cheesecake(cheesecakeData);
|
38
|
+
cheese.syncSectorFocusCallbacks = false;
|
39
|
+
cheese.onSectorFocusBegin = function(cheesecake,callback){
|
40
|
+
if(cheese.highlightedSector.auxiliar){
|
41
|
+
$("#contacts_explorer").animate({width: 0},500,function(){
|
42
|
+
$("#contacts_explorer").hide();
|
43
|
+
});
|
44
|
+
setTimeout(function(){
|
45
|
+
$("#sector_form").show();
|
46
|
+
$("#sector_form").animate({width: 300},500);
|
47
|
+
},100);
|
48
|
+
}else{
|
49
|
+
$("#contacts_grid_available").fadeOut("fast", callback);
|
50
|
+
}
|
51
|
+
};
|
52
|
+
cheese.onSectorFocusEnd = function(cheesecake){
|
53
|
+
if(cheese.highlightedSector.auxiliar){
|
54
|
+
|
55
|
+
}else{
|
56
|
+
$("#contacts_grid_available").fadeIn("fast");
|
57
|
+
}
|
58
|
+
};
|
59
|
+
cheese.onSectorUnfocusBegin = function(cheesecake,callback){
|
60
|
+
if(cheese.highlightedSector.auxiliar){
|
61
|
+
|
62
|
+
}else{
|
63
|
+
$("#contacts_grid_available").fadeOut("fast", callback);
|
64
|
+
}
|
65
|
+
};
|
66
|
+
cheese.onSectorUnfocusEnd = function(cheesecake){
|
67
|
+
if(cheese.highlightedSector.auxiliar){
|
68
|
+
$("#sector_form").animate({width: 0},500,function(){
|
69
|
+
$("#sector_form").hide();
|
70
|
+
});
|
71
|
+
setTimeout(function(){
|
72
|
+
$("#contacts_explorer").show();
|
73
|
+
$("#contacts_explorer").animate({width: 300},500);
|
74
|
+
},100);
|
75
|
+
}else{
|
76
|
+
$("#contacts_grid_available").fadeIn("fast");
|
77
|
+
}
|
78
|
+
};
|
79
|
+
$("#contacts_filter_input").keyup(function(){
|
80
|
+
cheese.searchEngine.filter($("#contacts_filter_input").val());
|
81
|
+
//TODO: Make users unfiltered visible again
|
82
|
+
});
|
83
|
+
cheese.onChange = function(cheesecake){
|
84
|
+
var initial = cheesecake.getInitialState();
|
85
|
+
var changes = cheesecake.getChanges();
|
86
|
+
if((changes.actors)&&(changes.actors.length==0)&&(changes.sectors)&&(changes.sectors.length==0)&&(changes.subsectors)&&(changes.subsectors.length==0)){
|
87
|
+
$("#contacts_changes_button").hide();
|
88
|
+
$("#contacts_save").hide();
|
89
|
+
}else{
|
90
|
+
$("#contacts_changes_button").show();
|
91
|
+
$("#contacts_save").show();
|
92
|
+
var total = 0;
|
93
|
+
if(changes.actors)
|
94
|
+
total += changes.actors.length;
|
95
|
+
if(changes.sectors)
|
96
|
+
total += changes.sectors.length;
|
97
|
+
if(changes.subsectors)
|
98
|
+
total += changes.subsectors.length;
|
99
|
+
$("#contacts_changes_button_total").html(total);
|
100
|
+
}
|
101
|
+
var changes_html = "";
|
102
|
+
var actors = changes.actors;
|
103
|
+
$("#contacts_save_changes").val(JSON.stringify(changes));
|
104
|
+
for(var i in actors){
|
105
|
+
actor = actors[i];
|
106
|
+
if(actor.justAdded){
|
107
|
+
var new_subsectors = actor.subsectors;
|
108
|
+
var new_subsectors_string = "";
|
109
|
+
for(var i in new_subsectors){
|
110
|
+
if(i > 0) new_subsectors_string += ", ";
|
111
|
+
new_subsectors_string += cheesecake.getSubsectorById(new_subsectors[i]).label;
|
112
|
+
}
|
113
|
+
changes_html += "<div class=\"change_added\">" + actor.name + " has been removed from " + old_subsectors_string + "</div>";
|
114
|
+
}else if(actor.subsectors.length==0){
|
115
|
+
var old_subsectors = [];
|
116
|
+
var old_subsectors_string = "";
|
117
|
+
for(var i in initial.actors){
|
118
|
+
if(actor.id==initial.actors[i].id){
|
119
|
+
old_subsectors = initial.actors[i].subsectors;
|
120
|
+
break;
|
71
121
|
}
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
122
|
+
}
|
123
|
+
for(var i in old_subsectors){
|
124
|
+
if(i > 0) old_subsectors_string += ", ";
|
125
|
+
old_subsectors_string += cheesecake.getSubsectorById(old_subsectors[i]).label;
|
126
|
+
}
|
127
|
+
changes_html += "<div class=\"change_deleted\">" + actor.name + " has been removed from " + old_subsectors_string + "</div>";
|
128
|
+
}else{
|
129
|
+
var old_subsectors = [];
|
130
|
+
var new_subsectors = actor.subsectors;
|
131
|
+
var left_subsectors = "";
|
132
|
+
var joined_subsectors = "";
|
133
|
+
for(var i in initial.actors){
|
134
|
+
if(actor.id==initial.actors[i].id){
|
135
|
+
old_subsectors = initial.actors[i].subsectors;
|
136
|
+
break;
|
83
137
|
}
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
left_subsectors += cheesecake.getSubsectorById(old_subsectors[i]).label;
|
138
|
+
}
|
139
|
+
for(var i in old_subsectors){
|
140
|
+
if(new_subsectors.indexOf(old_subsectors[i])==-1){
|
141
|
+
if(left_subsectors.length!=0){
|
142
|
+
left_subsectors += ", ";
|
90
143
|
}
|
144
|
+
left_subsectors += cheesecake.getSubsectorById(old_subsectors[i]).label;
|
91
145
|
}
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
joined_subsectors += cheesecake.getSubsectorById(new_subsectors[i]).label;
|
146
|
+
}
|
147
|
+
for(var i in new_subsectors){
|
148
|
+
if(old_subsectors.indexOf(new_subsectors[i])==-1){
|
149
|
+
if(joined_subsectors.length!=0){
|
150
|
+
joined_subsectors += ", ";
|
98
151
|
}
|
152
|
+
joined_subsectors += cheesecake.getSubsectorById(new_subsectors[i]).label;
|
99
153
|
}
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
154
|
+
}
|
155
|
+
if((joined_subsectors.length!=0)&&(left_subsectors.length!=0)){
|
156
|
+
changes_html += "<div class=\"change_modified\">" + actor.name + " has been removed from " + left_subsectors + " and added to " + joined_subsectors + "</div>";
|
157
|
+
}else if(joined_subsectors.length!=0){
|
158
|
+
changes_html += "<div class=\"change_added\">" + actor.name + " has been added to " + joined_subsectors + "</div>";
|
159
|
+
}else{
|
160
|
+
changes_html += "<div class=\"change_deleted\">" + actor.name + " has been removed from " + left_subsectors + "</div>";
|
107
161
|
}
|
108
162
|
}
|
109
|
-
$("#contacts_changes_details").html(changes_html);
|
110
163
|
}
|
111
|
-
$(
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
164
|
+
$("#contacts_changes_details").html(changes_html);
|
165
|
+
}
|
166
|
+
$('#contacts_changes_button').tipsy({
|
167
|
+
delayIn: 0,
|
168
|
+
delayOut: 0,
|
169
|
+
gravity: 'se',
|
170
|
+
opacity: 1,
|
171
|
+
trigger: 'manual',
|
172
|
+
className: 'contacts_changes_tipsy_menu',
|
173
|
+
html: true,
|
174
|
+
hoverable: true,
|
175
|
+
title: function(){
|
176
|
+
return $('#contacts_changes').html();
|
177
|
+
}
|
178
|
+
});
|
179
|
+
$("#contacts_save_changes").val(JSON.stringify(cheese.getChanges()));
|
180
|
+
$("#contacts_save_form").off("submit.disable");
|
181
|
+
$("#contacts_save_form").on("submit.disable",function(){
|
182
|
+
|
183
|
+
if($(".contacts_changes_tipsy_menu").length != 0){
|
184
|
+
$("#contacts_changes_button").tipsy("hide");
|
185
|
+
}
|
186
|
+
$("#contacts_grid_saving").show();
|
187
|
+
cheese.disable();
|
188
|
+
$("#contacts_save_button").val("<%= t('cheesecake.changes.saving') %>").attr("disabled","true");
|
189
|
+
});
|
125
190
|
});
|