social_cheesecake 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. data/app/assets/javascripts/kinetic.js +812 -432
  2. data/app/assets/javascripts/socialcheesecake/_header.js +1 -1
  3. data/app/assets/javascripts/socialcheesecake/actor.js +57 -32
  4. data/app/assets/javascripts/socialcheesecake/cheesecake.js +257 -280
  5. data/app/assets/javascripts/socialcheesecake/grid.js +168 -56
  6. data/app/assets/javascripts/socialcheesecake/sector.js +124 -70
  7. data/app/assets/javascripts/socialcheesecake/text.js +9 -4
  8. data/lib/social_cheesecake/version.rb +1 -1
  9. data/test/dummy/app/assets/images/images/ui-bg_diagonals-medium_20_d34d17_40x40.png +0 -0
  10. data/test/dummy/app/assets/images/images/ui-bg_flat_30_cccccc_40x100.png +0 -0
  11. data/test/dummy/app/assets/images/images/ui-bg_flat_50_5c5c5c_40x100.png +0 -0
  12. data/test/dummy/app/assets/images/images/ui-bg_gloss-wave_45_817865_500x100.png +0 -0
  13. data/test/dummy/app/assets/images/images/ui-bg_gloss-wave_60_fece2f_500x100.png +0 -0
  14. data/test/dummy/app/assets/images/images/ui-bg_gloss-wave_70_ffdd57_500x100.png +0 -0
  15. data/test/dummy/app/assets/images/images/ui-bg_gloss-wave_90_fff9e5_500x100.png +0 -0
  16. data/test/dummy/app/assets/images/images/ui-bg_highlight-soft_100_feeebd_1x100.png +0 -0
  17. data/test/dummy/app/assets/images/images/ui-bg_inset-soft_30_ffffff_1x100.png +0 -0
  18. data/test/dummy/app/assets/images/images/ui-icons_3d3d3d_256x240.png +0 -0
  19. data/test/dummy/app/assets/images/images/ui-icons_bd7b00_256x240.png +0 -0
  20. data/test/dummy/app/assets/images/images/ui-icons_d19405_256x240.png +0 -0
  21. data/test/dummy/app/assets/images/images/ui-icons_eb990f_256x240.png +0 -0
  22. data/test/dummy/app/assets/images/images/ui-icons_ed9f26_256x240.png +0 -0
  23. data/test/dummy/app/assets/images/images/ui-icons_fadc7a_256x240.png +0 -0
  24. data/test/dummy/app/assets/images/images/ui-icons_ffe180_256x240.png +0 -0
  25. data/test/dummy/app/assets/images/socialcheesecake_background.png +0 -0
  26. data/test/dummy/app/assets/images/soialcheesecake_icon.png +0 -0
  27. data/test/dummy/app/assets/images/soialcheesecake_icon_back.png +0 -0
  28. data/test/dummy/app/assets/images/under-construction.png +0 -0
  29. data/test/dummy/app/assets/javascripts/application.js +1 -0
  30. data/test/dummy/app/assets/javascripts/main.js +352 -0
  31. data/test/dummy/app/assets/stylesheets/jquery-ui-1.8.17.custom.css +565 -0
  32. data/test/dummy/app/assets/stylesheets/style.css +251 -0
  33. data/test/dummy/public/index.html +149 -119
  34. data/test/dummy/vendor/assets/javascripts/jquery-ui.js +356 -0
  35. metadata +29 -4
@@ -8,10 +8,13 @@ var socialCheesecake = socialCheesecake || {};
8
8
  this.parent = settings.parent;
9
9
  this.id = settings.grid_id;
10
10
  this.divIdPrefix = settings.divIdPrefix;
11
+ this.visibleActors = [];
11
12
  }
12
13
 
13
14
  socialCheesecake.Grid.prototype.addActor = function (actor_info, subsector) {
14
15
  var actors = this.actors;
16
+ var visibleActors = this.visibleActors;
17
+ var maxVisibleActors = socialCheesecake.Cheesecake.getMaxVisibleActors();
15
18
  var actor;
16
19
 
17
20
  //Check if the actor is already in the array
@@ -33,6 +36,10 @@ var socialCheesecake = socialCheesecake || {};
33
36
  actor_info.parent = subsector;
34
37
  actor = new socialCheesecake.Actor(actor_info);
35
38
  actors.push(actor);
39
+ if(actors.length <= maxVisibleActors ){
40
+ actor.show();
41
+ visibleActors.push(actor);
42
+ }
36
43
  }
37
44
  return actor;
38
45
  }
@@ -57,56 +64,114 @@ var socialCheesecake = socialCheesecake || {};
57
64
  }
58
65
 
59
66
  socialCheesecake.Grid.prototype.getSelectedActors = function(){
60
- var actors = this.actors;
67
+ var actors = this.visibleActors;
61
68
  var selectedActors = [];
62
69
  for (var i in actors){
63
- if(actors[i].isSelected()) selectedActors.push(actors[i]);
70
+ if(actors[i] && actors[i].isSelected()) selectedActors.push(actors[i]);
64
71
  }
65
72
  return selectedActors;
66
73
  }
67
74
 
68
75
  socialCheesecake.Grid.prototype.getShownActors = function(){
69
- var actors = this.actors;
70
- var shownActors = [];
71
- for (var i in actors){
72
- if((!actors[i].isHidden())&&(!actors[i].isFiltered())) shownActors.push(actors[i]);
76
+ return this.visibleActors;
77
+ }
78
+
79
+ socialCheesecake.Grid.prototype.select = function (actor_ids) {
80
+ var actor;
81
+
82
+ if (actor_ids instanceof Array) {
83
+ for(var i in actor_ids){
84
+ actor = actor_ids[i];
85
+ if (actor){
86
+ if(!(actor instanceof socialCheesecake.Actor)){
87
+ actor = this.getActor(actor);
88
+ }
89
+ actor.select();
90
+ }
91
+ }
92
+ } else {
93
+ actor = actor_ids;
94
+ if(!(actor_ids instanceof socialCheesecake.Actor)){
95
+ actor = this.getActor(actor_ids);
96
+ }
97
+ actor.select();
73
98
  }
74
- return shownActors;
99
+ }
100
+
101
+ socialCheesecake.Grid.prototype.selectAll = function () {
102
+ this.select(this.visibleActors);
103
+ }
104
+
105
+ socialCheesecake.Grid.prototype.unselect = function (actor_ids) {
106
+ var actor;
107
+
108
+ if (actor_ids instanceof Array) {
109
+ for(var i in actor_ids){
110
+ actor = actor_ids[i];
111
+ if (actor){
112
+ if(!(actor instanceof socialCheesecake.Actor)){
113
+ actor = this.getActor(actor);
114
+ }
115
+ actor.unselect();
116
+ }
117
+ }
118
+ } else {
119
+ actor = actor_ids;
120
+ if(!(actor_ids instanceof socialCheesecake.Actor)){
121
+ actor = this.getActor(actor_ids);
122
+ }
123
+ actor.unselect();
124
+ }
125
+ }
126
+
127
+ socialCheesecake.Grid.prototype.unselectAll = function () {
128
+ this.unselect(this.visibleActors);
75
129
  }
76
130
 
77
131
  socialCheesecake.Grid.prototype.focus = function (actor_ids) {
132
+ var actor;
133
+
78
134
  if (actor_ids instanceof Array) {
79
135
  for(var i in actor_ids){
80
- var actor = actor_ids[i];
81
- if(actor instanceof socialCheesecake.Actor){
136
+ actor = actor_ids[i];
137
+ if (actor){
138
+ if(!(actor instanceof socialCheesecake.Actor)){
139
+ actor = this.getActor(actor);
140
+ }
82
141
  actor.focus();
83
- }else{
84
- this.getActor(actor).focus();
85
- }
142
+ }
86
143
  }
87
144
  } else {
88
- if(actor_ids instanceof socialCheesecake.Actor){
89
- actor_ids.focus();
90
- }else{
91
- this.getActor(actor_ids).focus();
92
- }
145
+ actor = actor_ids;
146
+ if(!(actor_ids instanceof socialCheesecake.Actor)){
147
+ actor = this.getActor(actor_ids);
148
+ }
149
+ actor.focus();
93
150
  }
94
151
  }
95
152
 
96
153
  socialCheesecake.Grid.prototype.focusAll = function () {
97
- this.focus(this.actors);
154
+ this.focus(this.visibleActors);
98
155
  }
99
156
 
100
157
  socialCheesecake.Grid.prototype.hide = function (actor_ids, ignoreSelected) {
101
158
  var actor;
159
+ var visibleActors = this.visibleActors;
160
+ var visibleActorIndex = -1;
161
+
102
162
  if (actor_ids instanceof Array) {
103
163
  for(var i in actor_ids){
104
164
  actor = actor_ids[i];
105
- if (!(actor instanceof socialCheesecake.Actor)){
106
- actor = this.getActor(actor);
165
+ if (actor){
166
+ if (!(actor instanceof socialCheesecake.Actor)){
167
+ actor = this.getActor(actor);
168
+ }
169
+ if((!actor.isSelected())||(ignoreSelected)){
170
+ actor.hide();
171
+ visibleActors[visibleActors.indexOf(actor)] = false;
172
+ }
107
173
  }
108
- if((!actor.isSelected())||(ignoreSelected)) actor.hide();
109
- }
174
+ }
110
175
  } else {
111
176
  if(actor_ids instanceof socialCheesecake.Actor){
112
177
  actor = actor_ids;
@@ -114,29 +179,47 @@ var socialCheesecake = socialCheesecake || {};
114
179
  actor = this.getActor(actor_ids);
115
180
  }
116
181
  actor.hide();
182
+ visibleActors[visibleActors.indexOf(actor)] = false;
183
+ }
184
+ visibleActorIndex = visibleActors.indexOf(false);
185
+ while(visibleActorIndex >= 0){
186
+ visibleActors.splice(visibleActorIndex,1);
187
+ visibleActorIndex = visibleActors.indexOf(false);
117
188
  }
118
189
  }
119
190
 
120
191
  socialCheesecake.Grid.prototype.hideAll = function () {
121
- this.hide(this.actors);
192
+ this.hide(this.visibleActors);
122
193
  }
123
194
 
124
195
  socialCheesecake.Grid.prototype.show = function (actor_ids) {
196
+ var actor;
197
+ var visibleActors = this.visibleActors;
198
+ var maxActors = Math.min(actor_ids.length, socialCheesecake.Cheesecake.getMaxVisibleActors());
199
+
125
200
  if (actor_ids instanceof Array) {
126
- for(var i in actor_ids){
127
- var actor = actor_ids[i];
128
- if(actor instanceof socialCheesecake.Actor){
129
- actor.show();
130
- }else{
131
- this.getActor(actor).show();
132
- }
201
+ for(var i = 0; visibleActors.length < maxActors ; i++){
202
+ actor = actor_ids[i];
203
+ if (actor){
204
+ if (!(actor instanceof socialCheesecake.Actor)){
205
+ actor = this.getActor(actor);
206
+ }
207
+ if((!actor.isSelected())||(ignoreSelected)){
208
+ actor.show();
209
+ if(visibleActors.indexOf(actor) == -1) visibleActors.push(actor);
210
+ }
211
+ }
133
212
  }
134
- } else {
213
+ } else if(visibleActors.length < maxActors){
135
214
  if(actor_ids instanceof socialCheesecake.Actor){
136
- actor_ids.show();
215
+ actor = actor_ids;
137
216
  }else{
138
- this.getActor(actor_ids).show();
139
- }
217
+ actor = this.getActor(actor_ids);
218
+ }
219
+ if((!actor.isSelected())||(ignoreSelected)){
220
+ actor.show();
221
+ if(visibleActors.indexOf(actor) == -1) visibleActors.push(actor);
222
+ }
140
223
  }
141
224
  }
142
225
 
@@ -145,37 +228,48 @@ var socialCheesecake = socialCheesecake || {};
145
228
  }
146
229
 
147
230
  socialCheesecake.Grid.prototype.unfocus = function (actor_ids) {
231
+ var actor;
232
+
148
233
  if (actor_ids instanceof Array) {
149
234
  for(var i in actor_ids){
150
- var actor = actor_ids[i];
151
- if(actor instanceof socialCheesecake.Actor){
235
+ actor = actor_ids[i];
236
+ if (actor){
237
+ if(!(actor instanceof socialCheesecake.Actor)){
238
+ actor = this.getActor(actor);
239
+ }
152
240
  actor.unfocus();
153
- }else{
154
- this.getActor(actor).unfocus();
155
241
  }
156
242
  }
157
243
  } else {
158
- if(actor_ids instanceof socialCheesecake.Actor){
159
- actor_ids.unfocus();
160
- }else{
161
- this.getActor(actor_ids).unfocus();
162
- }
244
+ actor = actor_ids;
245
+ if(!(actor_ids instanceof socialCheesecake.Actor)){
246
+ actor = this.getActor(actor_ids);
247
+ }
248
+ actor.unfocus();
163
249
  }
164
250
  }
165
251
 
166
252
  socialCheesecake.Grid.prototype.unfocusAll = function () {
167
- this.unfocus(this.actors);
253
+ this.unfocus(this.visibleActors);
168
254
  }
169
255
 
170
256
  socialCheesecake.Grid.prototype.fadeOut = function (actor_ids, time, modifyDisplay, ignoreSelected) {
171
257
  var actor;
258
+ var visibleActors = this.visibleActors;
259
+ var visibleActorIndex = -1;
260
+
172
261
  if (actor_ids instanceof Array) {
173
262
  for(var i in actor_ids){
174
263
  actor = actor_ids[i];
175
- if (!(actor instanceof socialCheesecake.Actor)){
176
- actor = this.getActor(actor);
177
- }
178
- if((!actor.isSelected())||(ignoreSelected)) actor.fadeOut(time, modifyDisplay);
264
+ if (actor){
265
+ if (!(actor instanceof socialCheesecake.Actor)){
266
+ actor = this.getActor(actor);
267
+ }
268
+ if((!actor.isSelected())||(ignoreSelected)){
269
+ actor.fadeOut(time, modifyDisplay);
270
+ visibleActors[visibleActors.indexOf(actor)] = false;
271
+ }
272
+ }
179
273
  }
180
274
  } else {
181
275
  if(actor_ids instanceof socialCheesecake.Actor){
@@ -183,31 +277,49 @@ var socialCheesecake = socialCheesecake || {};
183
277
  }else{
184
278
  actor = this.getActor(actor_ids);
185
279
  }
186
- if((!actor.isSelected())||(ignoreSelected)) actor.fadeOut(time, modifyDisplay);
280
+ if((!actor.isSelected())||(ignoreSelected)){
281
+ actor.fadeOut(time, modifyDisplay);
282
+ visibleActors[visibleActors.indexOf(actor)] = false;
283
+ }
284
+ }
285
+ visibleActorIndex = visibleActors.indexOf(false);
286
+ while(visibleActorIndex >= 0){
287
+ visibleActors.splice(visibleActorIndex,1);
288
+ visibleActorIndex = visibleActors.indexOf(false);
187
289
  }
188
290
  }
189
291
 
190
292
  socialCheesecake.Grid.prototype.fadeOutAll = function (time, modifyDisplay) {
191
- this.fadeOut(this.actors, time, modifyDisplay);
293
+ this.fadeOut(this.visibleActors, time, modifyDisplay);
192
294
  }
193
295
 
194
296
  socialCheesecake.Grid.prototype.fadeIn = function (actor_ids, time, modifyDisplay, ignoreSelected) {
195
297
  var actor;
298
+ var visibleActors = this.visibleActors;
299
+ var maxActors = Math.min(actor_ids.length, socialCheesecake.Cheesecake.getMaxVisibleActors());
196
300
  if (actor_ids instanceof Array) {
197
- for(var i in actor_ids){
301
+ for(var i = 0; visibleActors.length < maxActors ; i++){
198
302
  actor = actor_ids[i];
199
- if (!(actor instanceof socialCheesecake.Actor)){
200
- actor = this.getActor(actor);
303
+ if (actor){
304
+ if (!(actor instanceof socialCheesecake.Actor)){
305
+ actor = this.getActor(actor);
306
+ }
307
+ if((!actor.isSelected())||(ignoreSelected)){
308
+ actor.fadeIn(time, modifyDisplay);
309
+ if(visibleActors.indexOf(actor) == -1) visibleActors.push(actor);
310
+ }
201
311
  }
202
- if((!actor.isSelected())||(ignoreSelected)) actor.fadeIn(time, modifyDisplay);
203
312
  }
204
- } else {
313
+ } else if(visibleActors.length < maxActors){
205
314
  if(actor_ids instanceof socialCheesecake.Actor){
206
315
  actor = actor_ids;
207
316
  }else{
208
317
  actor = this.getActor(actor_ids);
209
318
  }
210
- if((!actor.isSelected())||(ignoreSelected)) actor.fadeIn(time, modifyDisplay);
319
+ if((!actor.isSelected())||(ignoreSelected)){
320
+ actor.fadeIn(time, modifyDisplay);
321
+ if(visibleActors.indexOf(actor) == -1) visibleActors.push(actor);
322
+ }
211
323
  }
212
324
  }
213
325
 
@@ -8,12 +8,13 @@ var socialCheesecake = socialCheesecake || {};
8
8
  delta : Math.PI /2 ,
9
9
  phi : 0,
10
10
  label : "",
11
- color : socialCheesecake.Cheesecake.getSectorFillColor(),
12
- textAndStrokeColor : socialCheesecake.Cheesecake.getSectorTextAndStrokeColor(),
13
- mouseover : { color : socialCheesecake.Cheesecake.getSectorHoverColor() },
14
- mouseout : { color : socialCheesecake.Cheesecake.getSectorFillColor() },
15
- mouseup : { color : socialCheesecake.Cheesecake.getSectorFillColor() },
16
- mousedown : { color : socialCheesecake.Cheesecake.getSectorFocusColor() },
11
+ color : socialCheesecake.colors.normalSector.background,
12
+ fontColor : socialCheesecake.colors.normalSector.font,
13
+ borderColor : socialCheesecake.colors.normalSector.border,
14
+ mouseover : { color : socialCheesecake.colors.normalSector.hover },
15
+ mouseout : { color : socialCheesecake.colors.normalSector.background },
16
+ mouseup : { color : socialCheesecake.colors.normalSector.background },
17
+ mousedown : { color : socialCheesecake.colors.normalSector.highlight },
17
18
  auxiliar : false
18
19
  }
19
20
  for(var property in defaultSettings) {
@@ -37,7 +38,8 @@ var socialCheesecake = socialCheesecake || {};
37
38
  this.delta = settings.delta;
38
39
  this.label = settings.label;
39
40
  this.color = settings.color;
40
- this.textAndStrokeColor = settings.textAndStrokeColor;
41
+ this.fontColor = settings.fontColor;
42
+ this.borderColor = settings.borderColor;
41
43
  this.mouseover = settings.mouseover;
42
44
  this.mouseup = settings.mouseup;
43
45
  this.mouseout = settings.mouseout;
@@ -65,27 +67,21 @@ var socialCheesecake = socialCheesecake || {};
65
67
  rIn : rInSubsector,
66
68
  rOut : rOutSubsector,
67
69
  actors : settings.subsectors[i].actors,
68
- mouseover : { color : socialCheesecake.Cheesecake.getSectorHoverColor(),
70
+ color : socialCheesecake.colors.normalSector.background,
71
+ borderColor : socialCheesecake.colors.normalSector.border,
72
+ fontColor : socialCheesecake.colors.normalSector.font,
73
+ mouseover : {
74
+ color : socialCheesecake.colors.normalSector.hover,
69
75
  callback : function(subsector) {
70
- /* FIX FOR EXECUTING MOUSEOUT BEFORE MOUSEOVER */
71
- for(var i in subsector.parent.subsectors){
72
- subsector.parent.subsectors[i].getRegion().removeEventListener("mouseout");
73
- if(subsector.parent.subsectors[i]!= subsector){
74
- subsector.parent.subsectors[i].changeColor(subsector.parent.subsectors[i].mouseout.color);
75
- }
76
- }
77
- subsector.getRegion().addEventListener("mouseout", function() {
78
- subsector.eventHandler('mouseout');
79
- });
80
- /* END of FIX */
81
76
  document.body.style.cursor = "pointer";
82
77
  subsector.getCheesecake().grid.hideAll();
83
78
  subsector.getCheesecake().grid.fadeIn(subsector.actors, 300, true);
84
79
  subsector.getCheesecake().setHighlightedSector(subsector);
80
+ subsector.getCheesecake().stage.mainLayer.draw();
85
81
  }
86
82
  },
87
83
  mouseout :{
88
- color : socialCheesecake.Cheesecake.getSectorFillColor(),
84
+ color : socialCheesecake.colors.normalSector.background,
89
85
  callback : function(subsector) {
90
86
  document.body.style.cursor = "default";
91
87
  subsector.getCheesecake().grid.fadeIn(subsector.parent.actors, 300, true);
@@ -93,11 +89,13 @@ var socialCheesecake = socialCheesecake || {};
93
89
  }
94
90
  },
95
91
  mousedown : {
92
+ color : socialCheesecake.colors.normalSector.highlight,
96
93
  callback : function(subsector) {
97
94
  var selectedActors = subsector.getCheesecake().grid.getSelectedActors();
98
- subsector.changeMembership(selectedActors);
95
+ if(selectedActors.length > 0) subsector.changeMembership(selectedActors);
99
96
  }
100
- }
97
+ },
98
+ mouseup : {color : socialCheesecake.colors.normalSector.background}
101
99
  });
102
100
  rInSubsector = rOutSubsector;
103
101
  this.subsectors.push(subsector);
@@ -111,7 +109,8 @@ var socialCheesecake = socialCheesecake || {};
111
109
  rIn : this.rIn,
112
110
  rOut : this.rOut,
113
111
  color : this.color,
114
- textAndStrokeColor : this.textAndStrokeColor,
112
+ fontColor : this.fontColor,
113
+ borderColor : this.borderColor,
115
114
  label : this.label,
116
115
  mouseover : this.mouseover,
117
116
  mouseout : this.mouseout,
@@ -132,7 +131,8 @@ var socialCheesecake = socialCheesecake || {};
132
131
  var rIn = this.rIn;
133
132
  var rOut = this.rOut;
134
133
  var color = this.color;
135
- var textAndStrokeColor = this.textAndStrokeColor;
134
+ var fontColor = this.fontColor;
135
+ var borderColor = this.borderColor;
136
136
  var label = this.label;
137
137
  var actors = this.actors;
138
138
 
@@ -146,18 +146,21 @@ var socialCheesecake = socialCheesecake || {};
146
146
  context.fillStyle = color;
147
147
  context.fill();
148
148
  context.lineWidth = 2;
149
- context.strokeStyle = textAndStrokeColor;
149
+ context.strokeStyle = borderColor;
150
150
  context.stroke();
151
151
  if((this.auxiliar)&&(label=="+")){
152
152
  socialCheesecake.text.addPlusCharacter(context, x, y, 0.5*(rOut-rIn) + rIn,
153
- phi, delta, textAndStrokeColor);
153
+ phi, delta, fontColor);
154
+ }else if((this.parent.auxiliar)&&(this.parent.label=="+")){
155
+ socialCheesecake.text.writeCurvedText(label, context, x, y, 0.7*(rOut-rIn) + rIn,
156
+ phi, delta, fontColor, "newStyle");
154
157
  }else{
155
158
  socialCheesecake.text.writeCurvedText(label, context, x, y, 0.7*(rOut-rIn) + rIn,
156
- phi, delta, textAndStrokeColor);
159
+ phi, delta, fontColor);
157
160
  }
158
161
  if(!this.auxiliar)
159
162
  socialCheesecake.text.writeCurvedText("(" + actors.length + ")", context, x, y,
160
- 0.55*(rOut-rIn) + rIn, phi, delta, textAndStrokeColor);
163
+ 0.55*(rOut-rIn) + rIn, phi, delta, fontColor);
161
164
  }
162
165
 
163
166
  socialCheesecake.Sector.prototype.getRegion = function() {
@@ -167,16 +170,16 @@ var socialCheesecake = socialCheesecake || {};
167
170
  var context = this.getContext();
168
171
  sector._draw(context);
169
172
  });
170
- sector._region.addEventListener('mouseover', function() {
173
+ sector._region.on('mouseover', function() {
171
174
  sector.eventHandler('mouseover');
172
175
  });
173
- sector._region.addEventListener('mouseout', function() {
176
+ sector._region.on('mouseout', function() {
174
177
  sector.eventHandler('mouseout');
175
178
  });
176
- sector._region.addEventListener('mousedown', function() {
179
+ sector._region.on('mousedown', function() {
177
180
  sector.eventHandler('mousedown');
178
181
  });
179
- sector._region.addEventListener('mouseup', function() {
182
+ sector._region.on('mouseup', function() {
180
183
  sector.eventHandler('mouseup');
181
184
  });
182
185
  }
@@ -203,6 +206,7 @@ var socialCheesecake = socialCheesecake || {};
203
206
 
204
207
  socialCheesecake.Sector.prototype.splitUp = function() {
205
208
  var cheesecake = this.getCheesecake();
209
+ var mainLayer = cheesecake.stage.mainLayer;
206
210
  var phi = this.phi;
207
211
  var delta = this.delta;
208
212
  var rOut = this.rOut;
@@ -223,9 +227,11 @@ var socialCheesecake = socialCheesecake || {};
223
227
  label : "+",
224
228
  parent : this,
225
229
  auxiliar : true,
226
- color : socialCheesecake.Cheesecake.getExtraSectorFillColor(),
230
+ color : socialCheesecake.colors.extraSector.background,
231
+ borderColor : socialCheesecake.colors.extraSector.border,
232
+ fontColor : socialCheesecake.colors.extraSector.font,
227
233
  mouseover : {
228
- color : socialCheesecake.Cheesecake.getExtraSectorHoverColor(),
234
+ color : socialCheesecake.colors.extraSector.hover,
229
235
  callback : function (sector){
230
236
  sector.resizeWidth({
231
237
  width : extraWidth*1.5,
@@ -235,7 +241,7 @@ var socialCheesecake = socialCheesecake || {};
235
241
  }
236
242
  },
237
243
  mouseout : {
238
- color : socialCheesecake.Cheesecake.getExtraSectorFillColor(),
244
+ color : socialCheesecake.colors.extraSector.background,
239
245
  callback : function(sector){
240
246
  sector.resizeWidth({
241
247
  width : extraWidth,
@@ -244,7 +250,9 @@ var socialCheesecake = socialCheesecake || {};
244
250
  priority : true
245
251
  })
246
252
  }
247
- }
253
+ },
254
+ mousedown : { color: socialCheesecake.colors.extraSector.highlight},
255
+ mouseup : { color: socialCheesecake.colors.extraSector.background }
248
256
  }
249
257
  //Add sector's subsectors
250
258
  for(var i in subsectors){
@@ -253,10 +261,10 @@ var socialCheesecake = socialCheesecake || {};
253
261
  subsectors[i].rOut = rIn + sectorWidth;
254
262
  subsectors[i].phi = phi;
255
263
  subsectors[i].delta = delta;
256
- cheesecake.stage.add(subsectors[i].getRegion());
264
+ mainLayer.add(subsectors[i].getRegion());
257
265
  rIn += sectorWidth;
258
266
  }
259
- //Add extra subsectors
267
+ //Add extra subsectors
260
268
  rIn = 0;
261
269
  for(var i = 0; i< parts- subsectors.length; i++){
262
270
  if(i == 0){
@@ -270,9 +278,11 @@ var socialCheesecake = socialCheesecake || {};
270
278
  label : "+",
271
279
  parent : this,
272
280
  auxiliar : true,
273
- color : socialCheesecake.Cheesecake.getExtraSectorFillColor(),
281
+ color : socialCheesecake.colors.extraSector.background,
282
+ borderColor : socialCheesecake.colors.extraSector.border,
283
+ fontColor : socialCheesecake.colors.extraSector.font,
274
284
  mouseover : {
275
- color : socialCheesecake.Cheesecake.getExtraSectorHoverColor(),
285
+ color : socialCheesecake.colors.extraSector.hover,
276
286
  callback : function (sector){
277
287
  sector.resizeWidth({
278
288
  width : extraWidth*1.5,
@@ -282,7 +292,7 @@ var socialCheesecake = socialCheesecake || {};
282
292
  }
283
293
  },
284
294
  mouseout : {
285
- color : socialCheesecake.Cheesecake.getExtraSectorFillColor(),
295
+ color : socialCheesecake.colors.extraSector.background,
286
296
  callback : function(sector){
287
297
  sector.resizeWidth({
288
298
  width : extraWidth,
@@ -291,7 +301,9 @@ var socialCheesecake = socialCheesecake || {};
291
301
  priority : true
292
302
  })
293
303
  }
294
- }
304
+ },
305
+ mousedown : { color: socialCheesecake.colors.extraSector.highlight},
306
+ mouseup : { color: socialCheesecake.colors.extraSector.background }
295
307
  }
296
308
  var extraSector = new socialCheesecake.Subsector(extraSettingsFirst);
297
309
  }else{
@@ -299,36 +311,36 @@ var socialCheesecake = socialCheesecake || {};
299
311
  extraSettings["rOut"]= rIn + extraWidth;
300
312
  var extraSector = new socialCheesecake.Subsector(extraSettings);
301
313
  }
302
- cheesecake.stage.add(extraSector.getRegion());
314
+ mainLayer.add(extraSector.getRegion());
303
315
  this.extraSubsectors.push(extraSector);
304
316
  rIn += extraWidth + sectorWidth;
305
317
  }
318
+ mainLayer.draw();
306
319
  }
307
320
 
308
321
  socialCheesecake.Sector.prototype.putTogether = function() {
309
322
  var cheesecake = this.getCheesecake();
323
+ var mainLayer = cheesecake.stage.mainLayer;
310
324
  var sector = (this.simulate != null) ? cheesecake.sectors[this.simulate] : this;
311
325
  var subsectors = sector.subsectors;
312
326
  var extraSubsectors = this.extraSubsectors;
313
327
  //Clear subsectors from stage
314
328
  for(var i = extraSubsectors.length ; i>0 ; i--){
315
- cheesecake.stage.remove((extraSubsectors.pop()).getRegion());
329
+ mainLayer.remove((extraSubsectors.pop()).getRegion());
316
330
  }
317
331
  for(var i in subsectors) {
318
- cheesecake.stage.remove(subsectors[i].getRegion());
332
+ mainLayer.remove(subsectors[i].getRegion());
319
333
  }
320
334
  }
321
335
 
322
336
  socialCheesecake.Sector.prototype.changeColor = function(color) {
323
337
  var sector = this;
324
- if (sector.getRegion().layer){
325
- var context = sector.getRegion().layer.getContext();
326
- var stage = sector.getCheesecake().stage;
327
- sector.color = color;
328
- context.restore();
329
- context.save();
330
- stage.draw();
331
- }
338
+ var stage = sector.getCheesecake().stage;
339
+ var context = stage.mainLayer.getContext();
340
+ sector.color = color;
341
+ context.restore();
342
+ context.save();
343
+ stage.draw();
332
344
  }
333
345
 
334
346
  /**
@@ -338,26 +350,27 @@ var socialCheesecake = socialCheesecake || {};
338
350
  * anchor - "beginning" , "b", "B"
339
351
  * "middle", "m", "M"
340
352
  * "end", "e", "E"
353
+ * priority - true to terminate other resizeDelta methods running
354
+ * callback - function to execute at the end of the animation
341
355
  */
342
356
  socialCheesecake.Sector.prototype.resizeDelta = function(options) {
343
357
  if(!options)
344
358
  throw "No arguments passed to the function";
345
359
  var sector = this;
346
- var context = sector.getRegion().layer.getContext();
347
360
  var stage = sector.getCheesecake().stage;
361
+ var context = stage.mainLayer.getContext();
348
362
  var currentDelta = sector.delta;
349
363
  var currentPhi = sector.phi;
350
364
  var step = 0.05;
351
365
  var goalDelta = Math.PI / 2;
352
366
  var anchor = 1;
367
+ var goOn = true;
368
+ var grow = 0;
353
369
 
354
370
  if(options.step) step = options.step;
355
371
  if(options.delta) {
356
372
  goalDelta = options.delta;
357
373
  }
358
- console.log("resizing delta of sector "+ sector.label);
359
- console.log("current delta "+ currentDelta);
360
- console.log("delta to achieve "+ goalDelta);
361
374
 
362
375
  if(options.anchor) {
363
376
  if((options.anchor.toLowerCase() == "b") || (options.anchor == "beginning"))
@@ -372,10 +385,19 @@ var socialCheesecake = socialCheesecake || {};
372
385
  if(currentDelta - goalDelta < step) step = currentDelta - goalDelta;
373
386
  currentDelta -= step;
374
387
  currentPhi += anchor * step;
388
+ grow = -1;
375
389
  } else if(currentDelta < goalDelta) {
376
390
  if(goalDelta - currentDelta < step) step = goalDelta - currentDelta;
377
391
  currentDelta += step;
378
392
  currentPhi -= anchor * step;
393
+ grow = 1;
394
+ }
395
+ if(options.priority) sector.growDelta =grow;
396
+ if((sector.growDelta !=null)&&(grow != sector.growDelta)){
397
+ goOn = false;
398
+ }else{
399
+ goOn = true;
400
+ sector.growDelta = grow;
379
401
  }
380
402
  sector.delta = currentDelta;
381
403
  sector.phi = currentPhi;
@@ -385,12 +407,15 @@ var socialCheesecake = socialCheesecake || {};
385
407
  context.save();
386
408
  stage.draw();
387
409
  //Repeat if necessary
388
- if(currentDelta != goalDelta) {
410
+ if(goOn && (Math.round(currentDelta*1000) != Math.round(goalDelta*1000))) {
389
411
  requestAnimFrame(function() {
390
412
  sector.resizeDelta(options);
391
413
  });
392
- } else if(options.callback) {
393
- options.callback();
414
+ }else{
415
+ sector.growDelta = undefined;
416
+ if(options.callback) {
417
+ options.callback();
418
+ }
394
419
  }
395
420
  }
396
421
 
@@ -402,11 +427,12 @@ var socialCheesecake = socialCheesecake || {};
402
427
  * "middle", "m", "M"
403
428
  * "rOut", "rout", "out", "O", "o"
404
429
  * priority - true to terminate other resizeWidth methods running
430
+ * callback - function to execute at the end of the animation
405
431
  */
406
432
  socialCheesecake.Sector.prototype.resizeWidth = function(options) {
407
433
  var sector = this;
408
- var context = sector.getRegion().layer.getContext();
409
434
  var stage = sector.getCheesecake().stage;
435
+ var context = stage.mainLayer.getContext();
410
436
  var currentRIn = this.rIn;
411
437
  var currentROut = this.rOut;
412
438
  var currentWidth = (currentROut - currentRIn);
@@ -478,8 +504,8 @@ var socialCheesecake = socialCheesecake || {};
478
504
 
479
505
  socialCheesecake.Sector.prototype.focus = function() {
480
506
  var sector = this;
481
- var context = sector.getRegion().layer.getContext();
482
507
  var stage = sector.getCheesecake().stage;
508
+ var context = stage.mainLayer.getContext();
483
509
  sector.rOut = sector.originalAttr.rOut * 1.05;
484
510
  context.restore();
485
511
  context.save();
@@ -488,14 +514,41 @@ var socialCheesecake = socialCheesecake || {};
488
514
 
489
515
  socialCheesecake.Sector.prototype.unfocus = function() {
490
516
  var sector = this;
491
- var context = sector.getRegion().layer.getContext();
492
517
  var stage = sector.getCheesecake().stage;
518
+ var context = stage.mainLayer.getContext();
493
519
  sector.rOut = sector.originalAttr.rOut;
494
520
  context.restore();
495
521
  context.save();
496
522
  stage.draw();
497
523
  }
498
524
 
525
+ /**
526
+ * open - true: expand sector
527
+ * - false: shrink sector
528
+ * resizeDeltaCallback - callback to execute at the end of the animation
529
+ */
530
+ socialCheesecake.Sector.prototype.fan = function(open, resizeDeltaCallback){
531
+ var sector = this;
532
+ var minDelta = Math.PI/5;
533
+
534
+ if(open && (sector.delta >= minDelta)) return;
535
+ if(open){
536
+ sector.getRegion().moveToTop();
537
+ sector.resizeDelta({
538
+ anchor: "m",
539
+ delta: minDelta,
540
+ callback : resizeDeltaCallback
541
+ });
542
+ }else{
543
+ sector.resizeDelta({
544
+ anchor: "m",
545
+ delta: sector.originalAttr.delta,
546
+ priority : true,
547
+ callback : resizeDeltaCallback
548
+ });
549
+ }
550
+ }
551
+
499
552
  socialCheesecake.Sector.prototype.rotateTo = function(options) {
500
553
  // update stage
501
554
  var sector = this;
@@ -504,11 +557,9 @@ var socialCheesecake = socialCheesecake || {};
504
557
  var step = 0.05;
505
558
  var anchor = 0;
506
559
  var stage = sector.getCheesecake().stage;
507
- var context = sector.getRegion().layer.getContext();
560
+ var context = stage.mainLayer.getContext();
508
561
  if(!options) throw "No arguments passed to the function";
509
562
  if(options.step) step = options.step;
510
- /*if(options.context == null) throw "context must be defined";
511
- var context = options.context;*/
512
563
  if(options.destination == null) throw "destination must be defined";
513
564
  if(options.anchor){
514
565
  if((options.anchor.toLowerCase() == "b") || (options.anchor == "beginning"))
@@ -640,7 +691,8 @@ var socialCheesecake = socialCheesecake || {};
640
691
  this.actors = [];
641
692
  this.auxiliar = (settings.auxiliar) ? settings.auxiliar : false;
642
693
  if(settings.color) this.color = settings.color;
643
- if(settings.textAndStrokeColor) this.textAndStrokeColor = settings.textAndStrokeColor;
694
+ if(settings.fontColor) this.fontColor = settings.fontColor;
695
+ if(settings.borderColor) this.borderColor = settings.borderColor;
644
696
  if(settings.mousedown != null) this.mousedown = settings.mousedown;
645
697
  if(settings.mouseup != null) this.mouseup = settings.mouseup;
646
698
  if(settings.mouseover != null) this.mouseover = settings.mouseover;
@@ -651,7 +703,8 @@ var socialCheesecake = socialCheesecake || {};
651
703
  for(var actor in settings.actors){
652
704
  var actor_info = {
653
705
  id : settings.actors[actor][0],
654
- name : settings.actors[actor][1]
706
+ name : settings.actors[actor][1],
707
+ extraInfo : settings.actors[actor][2]
655
708
  }
656
709
  this.addActor(actor_info ,this);
657
710
  }
@@ -669,7 +722,8 @@ var socialCheesecake = socialCheesecake || {};
669
722
  delta : this.delta,
670
723
  auxiliar : this.auxiliar,
671
724
  color : this.color,
672
- textAndStrokeColor : this.textAndStrokeColor,
725
+ fontColor : this.fontColor,
726
+ borderColor : this.borderColor,
673
727
 
674
728
  mouseover : this.mouseover,
675
729
  mouseout : this.mouseout,
@@ -718,7 +772,7 @@ var socialCheesecake = socialCheesecake || {};
718
772
  actorInfo = { id : actors[i].id};
719
773
  this.addActor(actorInfo, this);
720
774
  }
721
- this.getCheesecake().updateActorMembership(actors[i].id);
775
+ this.getCheesecake().updateActorMembership(actors[i]);
722
776
  isMember = false;
723
777
  }
724
778
  this.getCheesecake().calculatePortions();