Browse Source

Merge pull request #103 from Aupajo/call-button

Option to enable toolbar call button
JC Brand 11 years ago
parent
commit
1323c0fccf
6 changed files with 67 additions and 2 deletions
  1. 4 0
      converse.css
  2. 16 1
      converse.js
  3. 5 0
      docs/CHANGES.rst
  4. 22 0
      docs/source/index.rst
  5. 19 1
      spec/chatbox.js
  6. 1 0
      tests_main.js

+ 4 - 0
converse.css

@@ -1083,6 +1083,10 @@ ul.chat-toolbar {
     float: right;
     float: right;
 }
 }
 
 
+.chat-toolbar .toggle-call {
+	color: rgb(79, 79, 79);
+}
+
 .chat-toolbar ul li a {
 .chat-toolbar ul li a {
     color: rgb(79, 79, 79);
     color: rgb(79, 79, 79);
 }
 }

+ 16 - 1
converse.js

@@ -137,6 +137,7 @@
         this.prebind = false;
         this.prebind = false;
         this.show_controlbox_by_default = false;
         this.show_controlbox_by_default = false;
         this.show_only_online_users = false;
         this.show_only_online_users = false;
+        this.show_call_button = false;
         this.show_emoticons = true;
         this.show_emoticons = true;
         this.show_toolbar = true;
         this.show_toolbar = true;
         this.use_vcards = true;
         this.use_vcards = true;
@@ -166,6 +167,7 @@
             'show_emoticons',
             'show_emoticons',
             'show_only_online_users',
             'show_only_online_users',
             'show_toolbar',
             'show_toolbar',
+            'show_call_button',
             'sid',
             'sid',
             'use_vcards',
             'use_vcards',
             'xhr_custom_status',
             'xhr_custom_status',
@@ -725,7 +727,8 @@
                 'click .toggle-otr': 'toggleOTRMenu',
                 'click .toggle-otr': 'toggleOTRMenu',
                 'click .start-otr': 'startOTRFromToolbar',
                 'click .start-otr': 'startOTRFromToolbar',
                 'click .end-otr': 'endOTR',
                 'click .end-otr': 'endOTR',
-                'click .auth-otr': 'authOTR'
+                'click .auth-otr': 'authOTR',
+                'click .toggle-call': 'toggleCall'
             },
             },
 
 
             template: _.template(
             template: _.template(
@@ -769,6 +772,9 @@
                         '</ul>' +
                         '</ul>' +
                     '</li>' +
                     '</li>' +
                 '{[ } ]}' +
                 '{[ } ]}' +
+                '{[ if (' + converse.show_call_button + ')  { ]}' +
+                    '<li><a class="toggle-call icon-phone" title="Start a call"></a></li>' +
+                '{[ } ]}' +
                 '{[ if (allow_otr)  { ]}' +
                 '{[ if (allow_otr)  { ]}' +
                     '<li class="toggle-otr {{otr_status_class}}" title="{{otr_tooltip}}">'+
                     '<li class="toggle-otr {{otr_status_class}}" title="{{otr_tooltip}}">'+
                         '<span class="chat-toolbar-text">{{otr_translated_status}}</span>'+
                         '<span class="chat-toolbar-text">{{otr_translated_status}}</span>'+
@@ -1162,6 +1168,15 @@
                 }
                 }
             },
             },
 
 
+            toggleCall: function (ev) {
+                ev.stopPropagation();
+
+                converse.emit('onCallButtonClicked', {
+                    connection: converse.connection,
+                    model: this.model
+                });
+            },
+
             onChange: function (item, changed) {
             onChange: function (item, changed) {
                 if (_.has(item.changed, 'chat_status')) {
                 if (_.has(item.changed, 'chat_status')) {
                     var chat_status = item.get('chat_status'),
                     var chat_status = item.get('chat_status'),

+ 5 - 0
docs/CHANGES.rst

@@ -1,6 +1,11 @@
 Changelog
 Changelog
 =========
 =========
 
 
+Unreleased
+----------
+
+* Option to display a call button in the chatbox toolbar, to allow third-party libraries to provide a calling feature. [Aupajo]
+
 0.7.2 (2013-12-18)
 0.7.2 (2013-12-18)
 ------------------
 ------------------
 
 

+ 22 - 0
docs/source/index.rst

@@ -813,6 +813,28 @@ the page with class *toggle-online-users*.
 If this options is set to true, the controlbox will by default be shown upon
 If this options is set to true, the controlbox will by default be shown upon
 page load.
 page load.
 
 
+
+show_call_button
+----------------
+
+Default = ``false``
+
+Enable to display a call button on the chatbox toolbar.
+
+When the call button is pressed, it will emit an event that can be used by a third-party library to initiate a call.
+
+::
+
+    converse.on('onCallButtonClicked', function(event, data) {
+        console.log('Call button was clicked.');
+        console.log('Strophe connection is', data.connection);
+        console.log('Bare buddy JID is', data.model.get('jid'));
+
+        // ... Third-party library code ...
+    });
+
+
+
 show_only_online_users
 show_only_online_users
 ----------------------
 ----------------------
 
 

+ 19 - 1
spec/chatbox.js

@@ -109,7 +109,7 @@
                     expect(view).toBeDefined();
                     expect(view).toBeDefined();
                     var $toolbar = view.$el.find('ul.chat-toolbar');
                     var $toolbar = view.$el.find('ul.chat-toolbar');
                     expect($toolbar.length).toBe(1);
                     expect($toolbar.length).toBe(1);
-                    expect($toolbar.children('li').length).toBe(2);
+                    expect($toolbar.children('li').length).toBe(3);
                 }, converse));
                 }, converse));
 
 
                 it("contains a button for inserting emoticons", $.proxy(function () {
                 it("contains a button for inserting emoticons", $.proxy(function () {
@@ -195,6 +195,24 @@
                     });
                     });
 
 
                 }, converse));
                 }, converse));
+
+                it("contains a button for starting a call", $.proxy(function () {
+                    spyOn(converse, 'emit');
+
+                    var contact_jid = mock.cur_names[2].replace(' ','.').toLowerCase() + '@localhost';
+                    utils.openChatBoxFor(contact_jid);
+                    var chatbox = this.chatboxes.get(contact_jid);
+                    var view = this.chatboxesview.views[contact_jid];
+                    var $toolbar = view.$el.find('ul.chat-toolbar');
+                    var callButton = $toolbar.find('.toggle-call');
+
+                    expect(callButton.length).toBe(1);
+
+                    runs(function () {
+                        callButton.click();
+                        expect(converse.emit).toHaveBeenCalledWith('onCallButtonClicked', jasmine.any(Object));
+                    });
+                }, converse));
             }, converse));
             }, converse));
 
 
             describe("A Chat Message", $.proxy(function () {
             describe("A Chat Message", $.proxy(function () {

+ 1 - 0
tests_main.js

@@ -106,6 +106,7 @@ require([
             xhr_user_search: false,
             xhr_user_search: false,
             auto_subscribe: false,
             auto_subscribe: false,
             animate: false,
             animate: false,
+            show_call_button: true,
             connection: mock.mock_connection,
             connection: mock.mock_connection,
             testing: true
             testing: true
         }, function (converse) {
         }, function (converse) {