social_stream 0.22.0 → 0.22.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. data/base/app/assets/javascripts/social_stream.search.js.erb +27 -0
  2. data/base/app/assets/stylesheets/activities.css.scss +2 -0
  3. data/base/app/controllers/search_controller.rb +5 -2
  4. data/base/app/helpers/activities_helper.rb +19 -0
  5. data/base/app/helpers/search_helper.rb +37 -7
  6. data/base/app/models/actor.rb +2 -1
  7. data/base/app/models/group.rb +2 -0
  8. data/base/app/views/activities/_likes.html.erb +5 -0
  9. data/base/app/views/activities/_root.html.erb +3 -0
  10. data/base/app/views/cheesecake/_cheesecake.html.erb +1 -1
  11. data/base/app/views/search/_form.html.erb +27 -48
  12. data/base/config/locales/en.yml +21 -3
  13. data/base/config/locales/es.yml +14 -3
  14. data/base/lib/social_stream/base/version.rb +1 -1
  15. data/documents/config/locales/en.yml +12 -3
  16. data/documents/config/locales/es.yml +12 -4
  17. data/documents/lib/social_stream/documents/version.rb +1 -1
  18. data/documents/lib/social_stream/toolbar_config/documents.rb +2 -2
  19. data/documents/social_stream-documents.gemspec +1 -1
  20. data/events/app/views/events/index.html.erb +2 -2
  21. data/events/config/locales/en.yml +4 -1
  22. data/events/config/locales/es.yml +4 -1
  23. data/events/lib/social_stream/events/version.rb +1 -1
  24. data/events/social_stream-events.gemspec +1 -1
  25. data/lib/social_stream/version.rb +1 -1
  26. data/presence/app/assets/javascripts/social_stream-presence.js +1 -0
  27. data/presence/app/assets/javascripts/xmpp_client_management.js.erb +14 -2
  28. data/presence/lib/social_stream/presence/engine.rb +6 -0
  29. data/presence/lib/social_stream/presence/models/group_manager.rb +41 -0
  30. data/presence/lib/social_stream/presence/version.rb +1 -1
  31. data/presence/lib/social_stream/presence/xmpp_server_order.rb +84 -10
  32. data/presence/lib/social_stream-presence.rb +1 -1
  33. data/presence/lib/tasks/presence/synchronize.rake +15 -0
  34. data/presence/social_stream-presence.gemspec +4 -4
  35. data/presence/vendor/assets/javascripts/strophe.muc.js +934 -0
  36. data/social_stream.gemspec +3 -3
  37. metadata +33 -29
@@ -0,0 +1,27 @@
1
+ SocialStream.Search = (function(SS, $, undefined){
2
+ function init(){
3
+ $.preloadImages ("<%= asset_path "mini-loading.gif" %>");
4
+
5
+ $('#search_form').submit(function() {
6
+ query = $('#global_search_input').val();
7
+ if((query=="")||(query.length < 2)||(query == I18n.t('search.write'))){
8
+ $('#too_short_error').show();
9
+ $('#global_search_input').removeClass("searching");
10
+ $('#global_search_input').blur();
11
+ $('#global_search_input').focus();
12
+ return false;
13
+ }else{
14
+ $('#global_search_input').addClass("searching");
15
+ $('#global_search_input').blur();
16
+ }
17
+ return true;
18
+ });
19
+
20
+ $("#global_search_input").Watermark(I18n.t('search.write'));
21
+ }
22
+
23
+ return {
24
+ init: init
25
+ }
26
+
27
+ }) (SocialStream, jQuery);
@@ -86,3 +86,5 @@
86
86
  .copy_new_comment{visibility: hidden; padding:6px; padding-bottom: 1.5em;font-size:inherit; line-height: 1.15em;
87
87
  margin-bottom:7px;}
88
88
  .input_new_comments_container{min-height: 30px; position: relative; }
89
+
90
+ .activity_likes{ margin-bottom: 2px; }
@@ -26,8 +26,11 @@ class SearchController < ApplicationController
26
26
  private
27
27
 
28
28
  def search mode
29
- models = SocialStream.extended_search_models
30
- models = SocialStream.quick_search_models if mode.to_s.eql? "quick"
29
+ models = ( mode.to_s.eql?("quick") ?
30
+ SocialStream.extended_search_models :
31
+ SocialStream.quick_search_models
32
+ ).dup
33
+
31
34
  models.map! {|model_sym| model_sym.to_s.classify.constantize}
32
35
  result = ThinkingSphinx.search(get_search_query, :classes => models)
33
36
  result = authorization_filter result
@@ -34,4 +34,23 @@ module ActivitiesHelper
34
34
  Post.new :author_id => Actor.normalize_id(current_subject),
35
35
  :owner_id => Actor.normalize_id(receiver)
36
36
  end
37
+
38
+ def like_sentence(activity)
39
+ likers_shown = 3
40
+ likers_count = activity.likes.count
41
+ likers_other = likers_count - likers_shown
42
+
43
+ # TODO: select likers from current_subject's contacts
44
+ likers =
45
+ activity.likes.first(likers_shown).
46
+ map{ |a| a.sender_subject }.
47
+ map{ |l| link_to l.name, l }.
48
+ join(", ")
49
+
50
+ if likers_other > 0
51
+ t("activity.like_sentence.many", :likers => likers, :count => likers_other).html_safe
52
+ else
53
+ t("activity.like_sentence.few", :likers => likers, :count => likers_count).html_safe
54
+ end
55
+ end
37
56
  end
@@ -1,10 +1,4 @@
1
1
  module SearchHelper
2
-
3
- def focus_search_link text, search_class, query
4
- search_class = search_class.to_s if search_class.is_a? Class or search_class.is_a? Symbol
5
- link_to text, search_path(:focus => search_class.downcase.pluralize, :search_query => query ), :remote => true
6
- end
7
-
8
2
  def too_short_query?
9
3
  return true if params[:search_query].blank?
10
4
  bare_query = strip_tags(params[:search_query]) unless bare_query.html_safe?
@@ -35,4 +29,40 @@ module SearchHelper
35
29
  bare_query = strip_tags(params[:search_query]) unless bare_query.html_safe?
36
30
  return bare_query.strip.split
37
31
  end
38
- end
32
+
33
+ def search_class(type, model_sym)
34
+ case type
35
+ when :selected
36
+ params[:focus].present? &&
37
+ params[:focus].eql?(model_sym.to_s) &&
38
+ 'selected' || ''
39
+ when :disabled
40
+ search_results?(model_sym) &&
41
+ '' || 'disabled'
42
+ else
43
+ raise "Unknown select search class type"
44
+ end
45
+ end
46
+
47
+ def search_results?(model_sym)
48
+ ThinkingSphinx.count(get_search_query,
49
+ :classes => [model_sym.to_s.classify.constantize]) > 0
50
+ end
51
+
52
+ def search_tab(model_sym)
53
+ span_options = {}
54
+ span_options[:class] = "#{ search_class(:selected, model_sym) } #{ search_class(:disabled, model_sym) } #{ model_sym.to_s.pluralize.downcase }"
55
+
56
+ results = search_results?(model_sym)
57
+
58
+ unless results
59
+ span_options[:title] = t('search.no_subject_found', :subject => model_sym.to_s)
60
+ end
61
+
62
+ link_to_if results,
63
+ content_tag(:span, t("#{ model_sym }.title.other"), span_options),
64
+ search_path(:focus => model_sym,
65
+ :search_query => params[:search_query]),
66
+ :remote => true
67
+ end
68
+ end
@@ -31,7 +31,8 @@ class Actor < ActiveRecord::Base
31
31
 
32
32
  has_many :avatars,
33
33
  :validate => true,
34
- :autosave => true
34
+ :autosave => true,
35
+ :dependent => :destroy
35
36
  has_one :avatar,
36
37
  :conditions => { :active => true }
37
38
 
@@ -53,3 +53,5 @@ class Group < ActiveRecord::Base
53
53
  end
54
54
  end
55
55
  end
56
+
57
+ ActiveSupport.run_load_hooks(:group, Group)
@@ -0,0 +1,5 @@
1
+ <% if activity.likes.present? %>
2
+ <div class="activity_likes subactivity " id="likes_<%= dom_id(activity) %>">
3
+ <%= like_sentence(activity) %>
4
+ </div>
5
+ <% end %>
@@ -19,6 +19,9 @@
19
19
  <%= render :partial => 'activities/options',
20
20
  :locals => { :activity => activity } %>
21
21
 
22
+ <%= render :partial => 'activities/likes',
23
+ :locals => { :activity => activity } %>
24
+
22
25
  <%= render :partial => 'activities/comments',
23
26
  :locals => { :activity => activity } %>
24
27
 
@@ -77,7 +77,7 @@ $(function(){
77
77
  $("#sector_editor").data("prepare")(subsector.getCheesecake(),subsector);
78
78
  };
79
79
  $("#contacts_filter_input").keyup(function(){
80
- cheese.searchEngine.filter($("#contacts_filter_input").val());
80
+ cheese.filter($("#contacts_filter_input").val());
81
81
  //TODO: Make users unfiltered visible again
82
82
  });
83
83
  cheese.onChange = function(cheesecake){
@@ -1,54 +1,33 @@
1
- <form action="<%= search_path %>" method="get" data-remote="true" id="search_form">
2
- <div class="block">
3
- <div class="error" id="too_short_error" <%= too_short_query? ? 'style=display:block;' : '' %>><%= t('search.at_least') %></div>
4
- <%= hidden_field_tag :focus, params[:focus] %>
5
- <div class="form_row search_row">
6
- <%= text_field_tag :search_query, params[:search_query].present? ? params[:search_query] : nil ,:autocomplete => :off, :id => :global_search_input %>
7
- </div>
8
- <div id="focus_options" class="form_row search_row">
9
- <ul class="menu_plain_list">
10
- <li><%= link_to content_tag(:span,t('search.show_all'),:class => params[:focus].blank? ? 'global selected' : 'global'), search_path(:search_query => params[:search_query]), :remote => true %></li>
11
- <% SocialStream.extended_search_models.each do |model_sym| %>
12
- <% selected_class = (params[:focus].present? and params[:focus].pluralize.downcase.eql?(model_sym.to_s.pluralize.downcase)) ? 'selected' : ''%>
13
- <% disabled = ThinkingSphinx.count(get_search_query, :classes => [model_sym.to_s.classify.constantize])==0 %>
14
- <% disabled_class = (disabled ? 'disabled' : '') %>
15
- <li>
16
- <% unless disabled %>
17
- <%= focus_search_link content_tag(:span, model_sym.to_s.pluralize.capitalize,
18
- :class => selected_class + " " + disabled_class + " " + model_sym.to_s.pluralize.downcase),
19
- model_sym.to_s.classify.constantize,
20
- params[:search_query] %>
21
- <% else %>
22
- <%= content_tag(:span, model_sym.to_s.pluralize.capitalize,
23
- :class => selected_class + " " + disabled_class + " " + model_sym.to_s.pluralize.downcase,
24
- :title => I18n.t('search.no_subject_found', :subject => model_sym.to_s)) %>
25
- <% end %>
26
- </li>
27
- <% end %>
28
- </ul>
29
- </div>
1
+ <%= form_tag search_path, :method => :get,
2
+ :remote => true,
3
+ :id => "search_form" do %>
4
+ <%= hidden_field_tag :focus, params[:focus] %>
5
+ <div class="block">
6
+ <div class="error" id="too_short_error" <%= 'style=display:block;' if too_short_query? %>><%= t('search.at_least') %></div>
7
+
8
+ <div class="form_row search_row">
9
+ <%= text_field_tag :search_query, params[:search_query], :autocomplete => :off, :id => :global_search_input %>
30
10
  </div>
31
- </form>
11
+
12
+ <div id="focus_options" class="form_row search_row">
13
+ <ul class="menu_plain_list">
14
+ <li><%= link_to content_tag(:span,
15
+ t('search.show_all'),
16
+ :class => "global #{ params[:focus].blank? && 'selected' }"),
17
+ search_path(:search_query => params[:search_query]),
18
+ :remote => true %></li>
19
+ <% SocialStream.extended_search_models.each do |model_sym| %>
20
+ <li>
21
+ <%= search_tab(model_sym) %>
22
+ </li>
23
+ <% end %>
24
+ </ul>
25
+ </div>
26
+ </div>
27
+ <% end %>
32
28
 
33
29
  <%= javascript_tag do %>
34
30
  $(function() {
35
- $.preloadImages ("assets/mini-loading.gif");
36
-
37
- $('#search_form').submit(function() {
38
- query = $('#global_search_input').val();
39
- if((query=="")||(query.length < 2)||(query=="<%= t('search.write') %>")){
40
- $('#too_short_error').show();
41
- $('#global_search_input').removeClass("searching");
42
- $('#global_search_input').blur();
43
- $('#global_search_input').focus();
44
- return false;
45
- }else{
46
- $('#global_search_input').addClass("searching");
47
- $('#global_search_input').blur();
48
- }
49
- return true;
50
- });
51
-
52
- $("#global_search_input").Watermark("<%= I18n.t('search.write') %>");
31
+ SocialStream.Search.init();
53
32
  });
54
33
  <% end %>
@@ -45,6 +45,13 @@ en:
45
45
  delete: "Delete"
46
46
  last: "Last Activities"
47
47
  like: "I like"
48
+ like_sentence:
49
+ few:
50
+ one: "%{likers} likes this"
51
+ other: "%{likers} like this"
52
+ many:
53
+ one: "%{likers} and %{count} more person like this"
54
+ other: "%{likers} and %{count} more people like this"
48
55
  one: "Activity"
49
56
  other: "Activities"
50
57
  privacy:
@@ -111,6 +118,9 @@ en:
111
118
  confirm_delete: "Delete comment?"
112
119
  name: "comment"
113
120
  one: "a comment"
121
+ title:
122
+ one: "Comment"
123
+ other: "Comments"
114
124
  view_all: "View all comments"
115
125
  contact:
116
126
  addressbook: "Addressbook"
@@ -226,6 +236,9 @@ en:
226
236
  followed: "Most followed"
227
237
  liked: "Most liked"
228
238
  tags: "Tags"
239
+ title:
240
+ one: "Group"
241
+ other: "Groups"
229
242
  help: "Help"
230
243
  helpers:
231
244
  submit:
@@ -337,7 +350,9 @@ en:
337
350
  input: "What are you doing?"
338
351
  name: "post"
339
352
  one: "a post"
340
- title: "Posts"
353
+ title:
354
+ one: "Post"
355
+ other: "Posts"
341
356
  preposition:
342
357
  and: "and"
343
358
  on: "on"
@@ -496,11 +511,14 @@ en:
496
511
  ago: "%{time} ago"
497
512
  unknown: "Unknown"
498
513
  user:
514
+ all: "All users"
515
+ all_n: "All users (%{count})"
499
516
  by: "By Users"
500
517
  one: "User"
501
518
  other: "Users"
502
- all: "All users"
503
- all_n: "All users (%{count})"
519
+ title:
520
+ one: "User"
521
+ other: "Users"
504
522
  welcome: "Welcome to %{site}!"
505
523
  lang:
506
524
  browser: "Auto-detect browser language"
@@ -112,6 +112,9 @@ es:
112
112
  name: "comentario"
113
113
  one: "un comentario"
114
114
  view_all: "Ver todos los comentarios"
115
+ title:
116
+ one: "Comentario"
117
+ other: "Comentarios"
115
118
  contact:
116
119
  addressbook: "Libreta de direcciones"
117
120
  all_n: "Todos los contactos (%{count})"
@@ -226,6 +229,9 @@ es:
226
229
  followed: "Más seguidos"
227
230
  liked: "Más populares"
228
231
  tags: "Etiquetas"
232
+ title:
233
+ one: "Grupo"
234
+ other: "Grupos"
229
235
  help: "Ayuda"
230
236
  helpers:
231
237
  submit:
@@ -337,7 +343,9 @@ es:
337
343
  input: "¿Qué quieres compartir?"
338
344
  name: "publicación"
339
345
  one: "una publicación"
340
- title: "Textos"
346
+ title:
347
+ one: "Texto"
348
+ other: "Textos"
341
349
  preposition:
342
350
  and: "y"
343
351
  profile:
@@ -514,11 +522,14 @@ es:
514
522
  ago: "hace %{time}"
515
523
  unknown: "Desconocido"
516
524
  user:
525
+ all: "Todos los usuarios"
526
+ all_n: "Todos los usuarios (%{count})"
517
527
  by: "Por usuarios"
518
528
  one: "Usuario"
519
529
  other: "Usuarios"
520
- all: "Todos los usuarios"
521
- all_n: "Todos los usuarios (%{count})"
530
+ title:
531
+ one: "Usuario"
532
+ other: "Usuarios"
522
533
  welcome: "¡Bienvenid@ a %{site}!"
523
534
  lang:
524
535
  browser: "Autodetectar el idioma del navegador"
@@ -1,5 +1,5 @@
1
1
  module SocialStream
2
2
  module Base
3
- VERSION = "0.16.3".freeze
3
+ VERSION = "0.16.4".freeze
4
4
  end
5
5
  end
@@ -12,6 +12,9 @@ en:
12
12
  not_mine: "Audios"
13
13
  one: "an audio"
14
14
  processing: "Processing audio clip. Please wait..."
15
+ title:
16
+ one: "Audio"
17
+ other: "Audios"
15
18
  document:
16
19
  actions:
17
20
  delete: "Delete"
@@ -38,15 +41,19 @@ en:
38
41
  not_mine: "Files"
39
42
  one: "a file"
40
43
  simple_all: "All"
41
- title: "Files"
44
+ title:
45
+ one: "File"
46
+ other: "Files"
42
47
  picture:
43
48
  confirm_delete: "Delete picture?"
44
- title: "Pictures"
45
49
  mine: "My pictures"
46
50
  msg: "See details..."
47
51
  name: "picture"
48
52
  not_mine: "Pictures"
49
53
  one: "a picture"
54
+ title:
55
+ one: "Picture"
56
+ other: "Pictures"
50
57
  repository:
51
58
  title: "Files"
52
59
  order:
@@ -62,10 +69,12 @@ en:
62
69
  not_mine: "Resources"
63
70
  video:
64
71
  confirm_delete: "Delete video?"
65
- title: "Videos"
66
72
  mine: "My videos"
67
73
  msg: "Uploaded a video:"
68
74
  name: "video"
69
75
  not_mine: "Videos"
70
76
  one: "a video"
71
77
  processing: "Processing video. Please, wait..."
78
+ title:
79
+ one: "Video"
80
+ other: "Videos"
@@ -5,13 +5,15 @@ es:
5
5
  title: "Título"
6
6
  audio:
7
7
  confirm_delete: "¿Borrar audios?"
8
- title: "Audios"
9
8
  mine: "Mis audios"
10
9
  msg: "Subió un audio:"
11
10
  name: "archivo de audio"
12
11
  not_mine: "Audios"
13
12
  one: "un archivo de audio"
14
13
  processing: "Procesando fichero de audio. Espere, por favor..."
14
+ title:
15
+ one: "Audio"
16
+ other: "Audios"
15
17
  document:
16
18
  actions:
17
19
  delete: "Borrar"
@@ -38,15 +40,19 @@ es:
38
40
  not_mine: "Ficheros"
39
41
  one: "un fichero"
40
42
  simple_all: "Todos"
41
- title: "Ficheros"
43
+ title:
44
+ one: "Fichero"
45
+ other: "Ficheros"
42
46
  picture:
43
47
  confirm_delete: "¿Borrar imagen?"
44
- title: "Imágenes"
45
48
  mine: "Mis imágenes"
46
49
  msg: "Ver detalles..."
47
50
  name: "imagen"
48
51
  not_mine: "Imágenes"
49
52
  one: "una imagen"
53
+ title:
54
+ one: "Imagen"
55
+ other: "Imágenes"
50
56
  repository:
51
57
  title: "Ficheros"
52
58
  order:
@@ -62,10 +68,12 @@ es:
62
68
  not_mine: "Recursos"
63
69
  video:
64
70
  confirm_delete: "¿Borrar vídeo?"
65
- title: "Vídeos"
66
71
  mine: "Mis vídeos"
67
72
  msg: "Subió un vídeo:"
68
73
  name: "vídeo"
69
74
  not_mine: "Vídeos"
70
75
  one: "un vídeo"
71
76
  processing: "Procesando vídeo. Espere, por favor..."
77
+ title:
78
+ one: "Vídeo"
79
+ other: "Vídeos"
@@ -1,5 +1,5 @@
1
1
  module SocialStream
2
2
  module Documents
3
- VERSION = "0.11.1".freeze
3
+ VERSION = "0.11.2".freeze
4
4
  end
5
5
  end
@@ -6,7 +6,7 @@ module SocialStream
6
6
 
7
7
  items << {
8
8
  :key => :documents,
9
- :name => image_tag("btn/btn_resource.png",:class =>"menu_icon")+t("document.title"),
9
+ :name => image_tag("btn/btn_resource.png",:class =>"menu_icon")+t("document.title.other"),
10
10
  :url => polymorphic_path([subject, Document.new]),
11
11
  :options => {:link => {:id => "documents_menu"}}
12
12
  }
@@ -17,7 +17,7 @@ module SocialStream
17
17
 
18
18
  items << {
19
19
  :key => :documents,
20
- :name => image_tag("btn/btn_resource.png",:class =>"menu_icon")+t("document.title"),
20
+ :name => image_tag("btn/btn_resource.png",:class =>"menu_icon")+t("document.title.other"),
21
21
  :url => polymorphic_path([current_subject, Document.new]),
22
22
  :options => {:link => {:id => "documents_menu"}}
23
23
  }
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
12
12
  s.files = `git ls-files`.split("\n")
13
13
 
14
14
  # Gem dependencies
15
- s.add_runtime_dependency('social_stream-base', '~> 0.16.2')
15
+ s.add_runtime_dependency('social_stream-base', '~> 0.16.4')
16
16
  s.add_runtime_dependency('paperclip-ffmpeg', '~> 0.7.0')
17
17
  s.add_runtime_dependency('paperclip','= 2.4.5')
18
18
  s.add_runtime_dependency('delayed_paperclip','2.4.5.1')
@@ -6,12 +6,12 @@
6
6
  <% end %>
7
7
 
8
8
  <% content_for :title do %>
9
- <%= profile_subject.name + ": " + t('event.title') %>
9
+ <%= profile_subject.name + ": " + t('event.calendar') %>
10
10
  <% end %>
11
11
 
12
12
  <%= location(
13
13
  link_to(profile_subject.name, polymorphic_path(profile_subject)),
14
- link_to(t('event.title'), polymorphic_path([profile_subject, Event.new]))
14
+ link_to(t('event.calendar'), polymorphic_path([profile_subject, Event.new]))
15
15
  ) %>
16
16
 
17
17
  <% toolbar :profile => profile_subject %>
@@ -19,11 +19,14 @@ en:
19
19
  boxy:
20
20
  close_text: "[close]"
21
21
  event:
22
+ calendar: "Calendar"
22
23
  confirm_delete: "Delete event?"
23
24
  new:
24
25
  title: "New event"
25
26
  one: "an event"
26
- title: "Calendar"
27
+ title:
28
+ one: "Event"
29
+ other: "Events"
27
30
  wall_post: "Published an event: %{title}"
28
31
  room:
29
32
  confirm_delete: "Delete room?"
@@ -19,11 +19,14 @@ es:
19
19
  boxy:
20
20
  close_text: "[cerrar]"
21
21
  event:
22
+ calendar: "Calendario"
22
23
  confirm_delete: "¿Borrar evento?"
23
24
  new:
24
25
  title: "Nuevo evento"
25
26
  one: "un evento"
26
- title: "Calendario"
27
+ title:
28
+ one: "Evento"
29
+ other: "Eventos"
27
30
  wall_post: "Publicó un evento: %{title}"
28
31
  room:
29
32
  confirm_delete: "¿Borrar espacio?"
@@ -1,5 +1,5 @@
1
1
  module SocialStream
2
2
  module Events
3
- VERSION = "0.8.1".freeze
3
+ VERSION = "0.8.2".freeze
4
4
  end
5
5
  end
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
12
12
  s.files = `git ls-files`.split("\n")
13
13
 
14
14
  # Gem dependencies
15
- s.add_runtime_dependency('social_stream-base', '~> 0.16.2')
15
+ s.add_runtime_dependency('social_stream-base', '~> 0.16.4')
16
16
  s.add_runtime_dependency('rails-scheduler', '~> 0.0.6')
17
17
  s.add_runtime_dependency('coffee-rails', '>= 3.1.0')
18
18
 
@@ -1,3 +1,3 @@
1
1
  module SocialStream
2
- VERSION = "0.22.0".freeze
2
+ VERSION = "0.22.1".freeze
3
3
  end
@@ -1,5 +1,6 @@
1
1
  //= require jquery
2
2
  //= require strophe
3
+ //= require strophe.muc
3
4
  //= require jquery.tools.tooltip
4
5
  //= require jquery.ui.chatbox.sstreampresence
5
6
  //= require jquery.flexselect.sstreampresence
@@ -441,7 +441,7 @@ function handleGetIQStanza(iq,jid,slug){
441
441
  return true;
442
442
  }
443
443
 
444
- //Case: Default behaviour
444
+ //Case 3: Default behaviour
445
445
  sendIQEmpty(jid,iqID);
446
446
 
447
447
  return true;
@@ -466,7 +466,7 @@ function handleGetVideochatIQStanza(jid,iqID,iq,slug){
466
466
  }
467
467
  }
468
468
 
469
- //Send error stanza
469
+ //Send empty stanza
470
470
  sendIQEmpty(jid,iqID);
471
471
  }
472
472
 
@@ -671,3 +671,15 @@ function sendStatus(status){
671
671
  setStatusWidgetTitle(status);
672
672
  }
673
673
  }
674
+
675
+
676
+
677
+ ////////
678
+ //MUC management
679
+ ///////
680
+
681
+ function joinRoom(roomName){
682
+ //domain
683
+ //stropne_connection.muc.init(stropne_connection)
684
+ //stropne_connection.muc.join(room, user_name, onMessage, onPresence, null, null)
685
+ }
@@ -6,6 +6,12 @@ module SocialStream
6
6
  include SocialStream::Presence::Models::BuddyManager
7
7
  end
8
8
  end
9
+
10
+ initializer "social_stream-presence.group" do
11
+ ActiveSupport.on_load(:group) do
12
+ include SocialStream::Presence::Models::GroupManager
13
+ end
14
+ end
9
15
 
10
16
  initializer "social_stream-presence.views.settings" do
11
17
  SocialStream::Views::Settings.module_eval do