Ver código fonte

Groupchat auto-configuration now supports list-multi fields

supun19 6 anos atrás
pai
commit
dd0821076d
3 arquivos alterados com 15 adições e 7 exclusões
  1. 1 1
      CHANGES.md
  2. 9 0
      spec/muc.js
  3. 5 6
      src/headless/converse-muc.js

+ 1 - 1
CHANGES.md

@@ -1,7 +1,7 @@
 # Changelog
 
 ## 5.0.0 (Unreleased)
-
+- Groupchat default configuration now supports `list-multi` fields
 - Bugfix: Don't set `muc_domain` for roomspanel if `locked_muc_domain` is `true`.
 - Bugfix: Modal auto-closes when you open it for a second time.
 - Take roster nickname into consideration when rendering messages and chat headings.

+ 9 - 0
spec/muc.js

@@ -156,6 +156,7 @@
                     'nick': 'some1',
                     'auto_configure': true,
                     'roomconfig': {
+                        'getmemberlist': ['moderator', 'participant'],
                         'changesubject': false,
                         'membersonly': true,
                         'persistentroom': true,
@@ -224,6 +225,13 @@
                         <field type="list-single" var="muc#roomconfig_whois" label="Who May Discover Real JIDs?"><option label="Moderators Only">
                            <value>moderators</value></option><option label="Anyone"><value>anyone</value></option>
                         </field>
+                        <field label="Roles and Affiliations that May Retrieve Member List"
+                               type="list-multi"
+                               var="muc#roomconfig_getmemberlist">
+                            <value>moderator</value>
+                            <value>participant</value>
+                            <value>visitor</value>
+                        </field>
                         <field type="text-private" var="muc#roomconfig_roomsecret" label="Password"><value/></field>
                         <field type="boolean" var="muc#roomconfig_moderatedroom" label="Make Room Moderated?"/>
                         <field type="boolean" var="muc#roomconfig_membersonly" label="Make Room Members-Only?"/>
@@ -243,6 +251,7 @@
                 expect(sizzle('field[var="muc#roomconfig_roomname"] value', sent_stanza).pop().textContent).toBe('Room');
                 expect(sizzle('field[var="muc#roomconfig_roomdesc"] value', sent_stanza).pop().textContent).toBe('Welcome to this groupchat');
                 expect(sizzle('field[var="muc#roomconfig_persistentroom"] value', sent_stanza).pop().textContent).toBe('1');
+                expect(sizzle('field[var="muc#roomconfig_getmemberlist"] value', sent_stanza).map(e => e.textContent).join(' ')).toBe('moderator participant');
                 expect(sizzle('field[var="muc#roomconfig_publicroom"] value ', sent_stanza).pop().textContent).toBe('1');
                 expect(sizzle('field[var="muc#roomconfig_changesubject"] value', sent_stanza).pop().textContent).toBe('0');
                 expect(sizzle('field[var="muc#roomconfig_whois"] value ', sent_stanza).pop().textContent).toBe('anyone');

+ 5 - 6
src/headless/converse-muc.js

@@ -658,19 +658,18 @@ converse.plugins.add('converse-muc', {
                 const fieldname = field.getAttribute('var').replace('muc#roomconfig_', '');
                 const config = this.get('roomconfig');
                 if (fieldname in config) {
-                    let value;
+                    let values;
                     switch (type) {
                         case 'boolean':
-                            value = config[fieldname] ? 1 : 0;
+                            values = [config[fieldname] ? 1 : 0];
                             break;
                         case 'list-multi':
-                            // TODO: we don't yet handle "list-multi" types
-                            value = field.innerHTML;
+                            values = config[fieldname];
                             break;
                         default:
-                            value = config[fieldname];
+                            values= [config[fieldname]];
                     }
-                    field.innerHTML = $build('value').t(value);
+                    field.innerHTML = values.map(v => $build('value').t(v)).join('');
                 }
                 return field;
             },