social_stream-presence 0.7.0 → 0.7.1

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.
@@ -12,7 +12,7 @@ function connectButtonTimerFunction(){
12
12
  connectButtonTimerCounter++;
13
13
  if (connectButtonTimerCounter > (periodBetweenAttempts-1)) {
14
14
  clearTimeout(connectButtonTimer);
15
- $("#chat_header_title").html('<%=I18n.t('chat.disconnected')%>')
15
+ changeChatHeaderTitle(I18n.t('chat.disconnected'))
16
16
  }
17
17
  }
18
18
 
@@ -20,7 +20,7 @@ function requestConnectToChat(){
20
20
  if (connectButtonTimerCounter > (periodBetweenAttempts-1)) {
21
21
  connectButtonTimerCounter=0;
22
22
  connectButtonTimer = setInterval("connectButtonTimerFunction()", 1000)
23
- $("#chat_header_title").html('<%=I18n.t('chat.connecting')%>')
23
+ changeChatHeaderTitle(I18n.t('chat.connecting'))
24
24
  return true
25
25
  } else {
26
26
  return false
@@ -110,8 +110,11 @@ function setUserFunctions(){
110
110
  //Search contacts enabling
111
111
  ///////////////
112
112
  $("select.flexselect").flexselect({
113
- allowMismatch: true
113
+ allowMismatch: true,
114
+ defaultmessage: I18n.t('chat.zerocontacts')
114
115
  });
116
+
117
+ $("#search_chat_contact_flexselect").Watermark(I18n.t('chat.search'),"#666");
115
118
 
116
119
  //Select contact function
117
120
  //callback in changeSelectContactValue()
@@ -129,8 +132,9 @@ function setUserFunctions(){
129
132
 
130
133
 
131
134
  function changeSelectContactValue(name,value){
132
- $("#search_chat_contact_flexselect").blur();
133
-
135
+
136
+ $("#search_chat_contact_flexselect").blur();
137
+
134
138
  if(value == "ZERO_CONTACTS"){
135
139
  return;
136
140
  }
@@ -209,7 +213,7 @@ function setStatusWidgetTitle(status){
209
213
  }
210
214
 
211
215
  if(status=="default"){
212
- var defaultTitle = '<%=I18n.t('chat.status.choose')%>'
216
+ var defaultTitle = I18n.t('chat.status.choose')
213
217
  $(".dropdown dt a span").html(defaultTitle);
214
218
  return;
215
219
  }
@@ -329,7 +333,7 @@ function hideConnectionBoxFromSlug(slug){
329
333
  if($(".users_connected p.zero_users_connected").length > 0){
330
334
  $(".users_connected p.zero_users_connected").show();
331
335
  } else {
332
- var msg = '<%=I18n.t('chat.zerousers')%>';
336
+ var msg = I18n.t('chat.zerousers');
333
337
  $(".users_connected").append('<p class="zero_users_connected">' + msg + '</p>')
334
338
  }
335
339
  }
@@ -447,7 +451,7 @@ function showOfflineChatNotificationForSlug(slug){
447
451
  var slug_chat_box = getChatBoxForSlug(slug);
448
452
  if(slug_chat_box!=null){
449
453
  var name = slug_chat_box.attr("name")
450
- var msg = name + ' ' + '<%=I18n.t('chat.notify.guestOffline')%>';
454
+ var msg = name + ' ' + I18n.t('chat.notify.guestOffline');
451
455
  showChatNotificationForSlug(slug,msg);
452
456
  }
453
457
  }
@@ -464,7 +468,7 @@ function hideChatNotificationForSlug(slug){
464
468
 
465
469
  function notifyWhenUsersDisconnect(){
466
470
  var notification = $("div.ui-chatbox-notify");
467
- var msg = '<%=I18n.t('chat.notify.offline')%>';
471
+ var msg = I18n.t('chat.notify.offline');
468
472
  showChatNotification(notification,msg);
469
473
  }
470
474
 
@@ -492,9 +496,17 @@ function updateAllNotifications(){
492
496
 
493
497
  function updateConnectedUsersOfMainChatBox(){
494
498
  if(mainChatBox!=null){
495
- var connectedUsers = getAllConnectedSlugs().length;
496
- changeMainChatBoxHeaderTitle( '<%=I18n.t('chat.title')%>' + " (" + connectedUsers + ")");
497
- changeMainChatBoxHeight(getChatBoxHeightRequiredForConnectionBoxes());
499
+ if(isStropheConnected()){
500
+ var connectedUsers = getAllConnectedSlugs().length;
501
+ changeMainChatBoxHeaderTitle( I18n.t('chat.title') + " (" + connectedUsers + ")");
502
+ changeMainChatBoxHeight(getChatBoxHeightRequiredForConnectionBoxes());
503
+ } else {
504
+ if(afterFirstConnectionFlag){
505
+ changeChatHeaderTitle(I18n.t('chat.connecting'))
506
+ } else {
507
+ changeChatHeaderTitle(I18n.t('chat.disconnected'))
508
+ }
509
+ }
498
510
  }
499
511
  }
500
512
 
@@ -266,12 +266,16 @@ function createMainChatBox(){
266
266
  //Delete closeTick and video Tick
267
267
  $(mainChatBox.parent().parent()).find(".ui-chatbox-titlebar").find(".ui-icon-closethick").remove();
268
268
  $(mainChatBox.parent().parent()).find(".ui-videobox-icon").remove();
269
+ //Margin for minusthick
270
+ (mainChatBox.parent().parent()).find(".ui-chatbox-titlebar").find(".chat-minusthick").parent().css("margin-right","5px")
269
271
  //Delete nofitications div
270
272
  $(mainChatBox.parent()).find(".ui-chatbox-notify").remove();
271
273
  //Delete video div
272
274
  $(mainChatBox.parent()).find(".ui-videobox").remove();
273
275
  //Delete input
274
276
  $(mainChatBox.parent()).find(".ui-chatbox-input").remove();
277
+ //Background
278
+ $(mainChatBox).css("background-color",$(mainChatBox.parent().parent()).find(".ui-chatbox-titlebar").css("background-color"));
275
279
 
276
280
  //Set height
277
281
  changeMainChatBoxHeight(getChatBoxHeightRequiredForConnectionBoxes());
@@ -207,6 +207,8 @@ function onConnect(status) {
207
207
  //addHandler:(callback, namespace to match, stanza name, stanza type, stanza id , stanza from, options)
208
208
  connection.addHandler(onMessage, null, 'message', null, null, null);
209
209
  connection.addHandler(onPresence, null, 'presence', null, null, null);
210
+ connection.addHandler(onIQStanza,null, "iq", null, null);
211
+
210
212
 
211
213
  disconnectionFlag = false;
212
214
  afterNewConnectionFlag = true;
@@ -232,20 +234,30 @@ function onReconnect(){
232
234
  if (reconnectAttempts>0) {
233
235
  reconnectAttempts--;
234
236
 
235
- $("#chat_header_title").html('<%=I18n.t('chat.reconnecting')%>')
237
+ changeChatHeaderTitle(I18n.t('chat.reconnecting'))
236
238
 
237
239
  connectToChat(user_jid,cookie,null);
238
240
 
239
241
  reconnectTimer = setTimeout ("onReconnect()", 9000);
240
242
 
241
243
  } else {
242
- $("#chat_header_title").html('<%=I18n.t('chat.unableconnect')%>')
244
+ changeChatHeaderTitle(I18n.t('chat.unableconnect'))
243
245
  //Notify issue to Rails App Server?
244
246
  }
245
247
 
246
248
  }
247
249
  }
248
250
 
251
+
252
+ function changeChatHeaderTitle(msg){
253
+ if(mainChatBox==null){
254
+ $("#chat_header_title").html(msg)
255
+ } else {
256
+ changeMainChatBoxHeaderTitle(msg);
257
+ }
258
+ }
259
+
260
+
249
261
  function disconnectStrophe(){
250
262
  userStatus = "offline";
251
263
  setStatusWidgetTitle("offline");
@@ -256,6 +268,7 @@ function disconnectStrophe(){
256
268
  }
257
269
  }
258
270
 
271
+
259
272
  ////////
260
273
  //Manage Message stanzas
261
274
  ///////
@@ -287,7 +300,7 @@ function onPresence(presence) {
287
300
  log(presence)
288
301
 
289
302
  //Check presence stanza type
290
- ptype = $(presence).attr('type');
303
+ var ptype = $(presence).attr('type');
291
304
 
292
305
  switch (ptype){
293
306
  case undefined:
@@ -309,12 +322,12 @@ function onPresence(presence) {
309
322
 
310
323
 
311
324
  function processAvailablePresenceStanza(presence){
312
- from = $(presence).attr('from');
313
- slug = from.split("@")[0];
325
+ var from = $(presence).attr('from');
326
+ var slug = from.split("@")[0];
314
327
 
315
328
  if (slug != user_slug) {
316
329
  if (getConnectionBoxFromSlug(slug)!=null){
317
- status = $(presence).find('show').text();
330
+ var status = $(presence).find('show').text();
318
331
  setUserIconStatus(slug, status);
319
332
  if (cacheConnectedUsers.indexOf(slug) != -1) {
320
333
  showConnectionBoxFromSlug(slug);
@@ -328,8 +341,8 @@ function processAvailablePresenceStanza(presence){
328
341
  }
329
342
 
330
343
  function processUnavailablePresenceStanza(presence){
331
- from = $(presence).attr('from');
332
- slug = from.split("@")[0];
344
+ var from = $(presence).attr('from');
345
+ var slug = from.split("@")[0];
333
346
 
334
347
  if (slug != user_slug) {
335
348
  if (getConnectionBoxFromSlug(slug)!=null){
@@ -340,6 +353,65 @@ function processUnavailablePresenceStanza(presence){
340
353
  }
341
354
  }
342
355
 
356
+
357
+ ////////
358
+ //Manage IQ stanzas
359
+ ///////
360
+ function onIQStanza(iq){
361
+
362
+ var from = iq.getAttribute("from");
363
+ var slug = from.split("@")[0];
364
+
365
+ if (slug == user_slug) {
366
+ return;
367
+ }
368
+
369
+ var queryElements = iq.getElementsByTagName('query');
370
+
371
+ if (queryElements.length > 0) {
372
+ var query = queryElements[0];
373
+ var type = query.getAttribute("xmlns");
374
+
375
+ if( type == "jabber:iq:version"){
376
+ var iqID = iq.getAttribute("id");
377
+
378
+ //Response to client info request.
379
+ sendIQStanzaWithClientInfo(from,iqID);
380
+ }
381
+ }
382
+
383
+ return true;
384
+ }
385
+
386
+
387
+ function sendIQStanzaWithClientInfo(jid,iqID){
388
+ var client = "Social Stream XMPP Client"
389
+ var version = '<%=Socialstream::Presence::VERSION%>';
390
+ var iq = $iq({to: jid, type: "result", id: iqID})
391
+ .c("query", {xmlns: "jabber:iq:version"}).c("name").t(client).up().c("version").t(version);
392
+ connection.sendIQ(iq);
393
+ }
394
+
395
+
396
+ var iqIDNumber = 1000;
397
+ function sendIQStanzaForRequestClientInfo(jid){
398
+ //var client = "Social Stream XMPP Client"
399
+ //var version = '<%=Socialstream::Presence::VERSION%>';
400
+ //var iq = $iq({to: jid, type: "result", id: iqID})
401
+ //.c("query", {xmlns: "jabber:iq:version"}).c("name").t(client).up().c("version").t(version);
402
+ //connection.sendIQ(iq);
403
+ }
404
+
405
+
406
+ function iqSuccess(){
407
+ log("iq sucess")
408
+ }
409
+
410
+ function iqFail(){
411
+ log("iq fail")
412
+ }
413
+
414
+
343
415
  ////////
344
416
  //Send Message stanzas
345
417
  ///////
@@ -357,7 +357,7 @@ a.chatImageLink:link, a.chatImageLink:visited {
357
357
 
358
358
 
359
359
 
360
- /* Chosen stylesheet */
360
+ /* Search contacts stylesheet */
361
361
 
362
362
  div.allContacts {
363
363
  width: 100px;
@@ -388,5 +388,4 @@ div.allContacts {
388
388
 
389
389
  #search_chat_contact_flexselect_dropdown li:hover {
390
390
  background: $separation-color;
391
- }
392
-
391
+ }
@@ -30,7 +30,15 @@
30
30
  <option value=""></option>
31
31
  <% unless @all_contacts.empty? %>
32
32
  <%@all_contacts.each do |contact| %>
33
- <option value="<%=contact.slug%>"><%=contact.name%></option>
33
+ <option value="<%=contact.slug%>">
34
+ <%=contact.name%>
35
+ <a title='<%=contact.name%>' class="presence_user_link" width="28">
36
+ <%=image_tag(contact.logo.url, :alt => contact.name , :size => "28x28")%>
37
+ <% if contact.user.status %>
38
+ <%=image_tag("status/" + contact.user.status + ".png", :class => "presence_status") %></a>
39
+ <% end %>
40
+ </a>
41
+ </option>
34
42
  <% end %>
35
43
  <% else %>
36
44
  <option value="ZERO_CONTACTS"> <%=t('chat.zerocontacts')%></option>
@@ -7,6 +7,7 @@ en:
7
7
  title: "Chat"
8
8
  password: "Password"
9
9
  zerousers: "No users connected"
10
+ search: "Search contacts"
10
11
  zerocontacts: "No contacts found"
11
12
  status:
12
13
  choose: "Choose status"
@@ -7,6 +7,7 @@ es:
7
7
  title: "Chat"
8
8
  password: "Contraseña"
9
9
  zerousers: "No hay contactos conectados"
10
+ search: "Buscar contactos"
10
11
  zerocontacts: "No se encontró ningún contacto"
11
12
  status:
12
13
  choose: "Establecer estado"
@@ -1,5 +1,5 @@
1
1
  module Socialstream
2
2
  module Presence
3
- VERSION = "0.7.0"
3
+ VERSION = "0.7.1"
4
4
  end
5
5
  end
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.require_paths = ["lib"]
20
20
 
21
21
  # Gem dependencies
22
- s.add_runtime_dependency('social_stream-base', '~> 0.16.0')
22
+ s.add_runtime_dependency('social_stream-base', '~> 0.16.1')
23
23
 
24
24
  s.add_runtime_dependency "xmpp4r"
25
25
 
@@ -21,6 +21,7 @@
21
21
  allowMismatch: false,
22
22
  selectedClass: "flexselect_selected",
23
23
  dropdownClass: "flexselect_dropdown",
24
+ defaultmessage: "No results",
24
25
  inputIdTransform: function(id) { return id + "_flexselect"; },
25
26
  inputNameTransform: function(name) { return; },
26
27
  dropdownIdTransform: function(id) { return id + "_flexselect_dropdown"; }
@@ -46,9 +47,15 @@
46
47
  this.wire();
47
48
  },
48
49
 
49
- preloadCache: function() {
50
+ //preloadCache: function() {
51
+ // this.cache = this.select.children("option").map(function() {
52
+ // return { name: $.trim($(this).text()), value: $(this).val(), score: 0.0 };
53
+ // });
54
+ //},
55
+
56
+ preloadCache: function() {
50
57
  this.cache = this.select.children("option").map(function() {
51
- return { name: $.trim($(this).text()), value: $(this).val(), score: 0.0 };
58
+ return { name: ($(this).html()), value: $(this).val(), score: 0.0 };
52
59
  });
53
60
  },
54
61
 
@@ -65,6 +72,7 @@
65
72
  name: this.settings.inputNameTransform(this.select.attr("name")),
66
73
  accesskey: this.select.attr("accesskey"),
67
74
  tabindex: this.select.attr("tabindex"),
75
+ placeholder: this.select.attr("placeholder"),
68
76
  style: this.select.attr("style")
69
77
  }).addClass(this.select.attr("class")).val($.trim(selected.text()));
70
78
 
@@ -84,6 +92,7 @@
84
92
  this.input.click(function() {
85
93
  self.lastAbbreviation = null;
86
94
  self.focus();
95
+ if (!self.picked) self.filterResults();
87
96
  });
88
97
 
89
98
  this.input.mouseup(function(event) {
@@ -94,7 +103,7 @@
94
103
  this.input.focus(function() {
95
104
  self.abbreviationBeforeFocus = self.input.val();
96
105
  self.input.select();
97
- if (!self.picked) self.filterResults();
106
+ //if (!self.picked) self.filterResults();
98
107
  });
99
108
 
100
109
  this.input.blur(function() {
@@ -185,8 +194,13 @@
185
194
  this.score = LiquidMetal.score(this.name, abbreviation);
186
195
  if (this.score > 0.0) results.push(this);
187
196
  });
197
+
198
+ if (results.length==0){
199
+ var defaultOption = { name: this.settings.defaultmessage, value: "ZERO_CONTACTS", score: 9.9 };
200
+ results.push(defaultOption);
201
+ }
202
+
188
203
  this.results = results;
189
-
190
204
  this.sortResults();
191
205
  this.renderDropdown();
192
206
  this.markFirst();
@@ -208,10 +222,13 @@
208
222
  });
209
223
 
210
224
  var list = this.dropdownList.html("");
211
- $.each(this.results, function() {
212
- // list.append($("<li/>").html(this.name + " <small>[" + Math.round(this.score*100)/100 + "]</small>"));
213
- list.append($("<li/>").html(this.name));
214
- });
225
+
226
+ if (this.results.length > 0) {
227
+ $.each(this.results, function() {
228
+ list.append($("<li/>").html(this.name));
229
+ });
230
+ }
231
+
215
232
  this.dropdown.show();
216
233
  },
217
234
 
@@ -230,16 +247,16 @@
230
247
  if (selected) {
231
248
  //this.input.val(selected.name);
232
249
  //this.picked = true;
250
+ this.hidden.val(selected.value);
251
+ this.input.val("");
233
252
  if(typeof changeSelectContactValue == "function"){
234
- changeSelectContactValue(selected.name,selected.value);
253
+ return changeSelectContactValue(selected.name,selected.value);
235
254
  }
236
- this.hidden.val(selected.value);
237
255
  } else if (this.settings.allowMismatch) {
238
256
  this.hidden.val("");
239
257
  } else {
240
258
  this.reset();
241
259
  }
242
- this.input.val("");
243
260
  },
244
261
 
245
262
  hide: function() {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: social_stream-presence
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,18 +13,18 @@ date: 2012-02-16 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: social_stream-base
16
- requirement: &80653400 !ruby/object:Gem::Requirement
16
+ requirement: &85013850 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 0.16.0
21
+ version: 0.16.1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *80653400
24
+ version_requirements: *85013850
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: xmpp4r
27
- requirement: &80653190 !ruby/object:Gem::Requirement
27
+ requirement: &85013460 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *80653190
35
+ version_requirements: *85013460
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: net-ssh
38
- requirement: &80652960 !ruby/object:Gem::Requirement
38
+ requirement: &85013170 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *80652960
46
+ version_requirements: *85013170
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: net-sftp
49
- requirement: &80652750 !ruby/object:Gem::Requirement
49
+ requirement: &85012890 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *80652750
57
+ version_requirements: *85012890
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: ruby-debug19
60
- requirement: &80652540 !ruby/object:Gem::Requirement
60
+ requirement: &85012460 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *80652540
68
+ version_requirements: *85012460
69
69
  description: Social Stream is a Ruby on Rails engine providing your application with
70
70
  social networking features and activity streams.
71
71
  email: