浏览代码

Add roomviews.get API method

JC Brand 6 年之前
父节点
当前提交
bfaa7e47f2
共有 2 个文件被更改,包括 73 次插入2 次删除
  1. 38 1
      dist/converse.js
  2. 35 1
      src/converse-muc-views.js

+ 38 - 1
dist/converse.js

@@ -53246,7 +53246,7 @@ _converse_headless_converse_core__WEBPACK_IMPORTED_MODULE_3__["default"].plugins
         this.roomspanel = new _converse.RoomsPanel({
           'model': new (_converse.RoomsPanelModel.extend({
             'id': `converse.roomspanel${_converse.bare_jid}`,
-            // Required by web storage 
+            // Required by web storage
             'browserStorage': new Backbone.BrowserStorage[_converse.config.get('storage')](`converse.roomspanel${_converse.bare_jid}`)
           }))()
         });
@@ -55392,6 +55392,43 @@ _converse_headless_converse_core__WEBPACK_IMPORTED_MODULE_3__["default"].plugins
        * @memberOf _converse.api
        */
       'roomviews': {
+        /**
+         * Retrieves a groupchat (aka chatroom) view. The chat should already be open.
+         *
+         * @method _converse.api.roomviews.get
+         * @param {String|string[]} name - e.g. 'coven@conference.shakespeare.lit' or
+         *  ['coven@conference.shakespeare.lit', 'cave@conference.shakespeare.lit']
+         * @returns {Backbone.View} Backbone.View representing the groupchat
+         *
+         * @example
+         * // To return a single view, provide the JID of the groupchat
+         * const view = _converse.api.roomviews.get('coven@conference.shakespeare.lit');
+         *
+         * @example
+         * // To return an array of views, provide an array of JIDs:
+         * const views = _converse.api.roomviews.get(['coven@conference.shakespeare.lit', 'cave@conference.shakespeare.lit']);
+         *
+         * @example
+         * // To return views of all open groupchats, call the method without any parameters::
+         * const views = _converse.api.roomviews.get();
+         *
+         */
+        get(jids) {
+          if (_.isArray(jids)) {
+            const views = _converse.api.chatviews.get(jids);
+
+            return views.filter(v => v.model.get('type') === _converse.CHATROOMS_TYPE);
+          } else {
+            const view = _converse.api.chatviews.get(jids);
+
+            if (view.model.get('type') === _converse.CHATROOMS_TYPE) {
+              return view;
+            } else {
+              return null;
+            }
+          }
+        },
+
         /**
          * Lets you close open chatrooms.
          *

+ 35 - 1
src/converse-muc-views.js

@@ -63,7 +63,7 @@ converse.plugins.add('converse-muc-views', {
                 }
                 this.roomspanel = new _converse.RoomsPanel({
                     'model': new (_converse.RoomsPanelModel.extend({
-                        'id': `converse.roomspanel${_converse.bare_jid}`, // Required by web storage 
+                        'id': `converse.roomspanel${_converse.bare_jid}`, // Required by web storage
                         'browserStorage': new Backbone.BrowserStorage[_converse.config.get('storage')](
                             `converse.roomspanel${_converse.bare_jid}`)
                     }))()
@@ -2083,6 +2083,40 @@ converse.plugins.add('converse-muc-views', {
              * @memberOf _converse.api
              */
             'roomviews': {
+                /**
+                 * Retrieves a groupchat (aka chatroom) view. The chat should already be open.
+                 *
+                 * @method _converse.api.roomviews.get
+                 * @param {String|string[]} name - e.g. 'coven@conference.shakespeare.lit' or
+                 *  ['coven@conference.shakespeare.lit', 'cave@conference.shakespeare.lit']
+                 * @returns {Backbone.View} Backbone.View representing the groupchat
+                 *
+                 * @example
+                 * // To return a single view, provide the JID of the groupchat
+                 * const view = _converse.api.roomviews.get('coven@conference.shakespeare.lit');
+                 *
+                 * @example
+                 * // To return an array of views, provide an array of JIDs:
+                 * const views = _converse.api.roomviews.get(['coven@conference.shakespeare.lit', 'cave@conference.shakespeare.lit']);
+                 *
+                 * @example
+                 * // To return views of all open groupchats, call the method without any parameters::
+                 * const views = _converse.api.roomviews.get();
+                 *
+                 */
+                get (jids) {
+                    if (_.isArray(jids)) {
+                        const views = _converse.api.chatviews.get(jids);
+                        return views.filter(v => v.model.get('type') === _converse.CHATROOMS_TYPE)
+                    } else {
+                        const view = _converse.api.chatviews.get(jids);
+                        if (view.model.get('type') === _converse.CHATROOMS_TYPE) {
+                            return view;
+                        } else {
+                            return null;
+                        }
+                    }
+                },
                 /**
                  * Lets you close open chatrooms.
                  *