diff --git a/converse.js b/converse.js index 9c5a71b3b..d5f9c86af 100755 --- a/converse.js +++ b/converse.js @@ -130,6 +130,7 @@ require.config({ "chatroom": "src/templates/chatroom", "chatroom_form": "src/templates/chatroom_form", "chatroom_password_form": "src/templates/chatroom_password_form", + "chatroom_nickname_form": "src/templates/chatroom_nickname_form", "chatroom_sidebar": "src/templates/chatroom_sidebar", "chatrooms_tab": "src/templates/chatrooms_tab", "chats_panel": "src/templates/chats_panel", diff --git a/css/converse.css b/css/converse.css index 6e871e3ea..274a12c67 100644 --- a/css/converse.css +++ b/css/converse.css @@ -759,7 +759,7 @@ margin: 0.5em 0 0.2em; } #conversejs .pure-form fieldset { margin: 0; - padding: 0.35em 0 0.75em; + padding: 0.35em 0 0.35em; border: 0; } #conversejs .pure-form legend { display: block; @@ -1951,6 +1951,9 @@ #conversejs #converse-roster span.pending-contact-name { width: 80%; } +#conversejs .add-chatroom input[type="submit"], +#conversejs .add-chatroom input[type="button"] { + margin: 0.3em 0; } #conversejs .chat-head-chatroom { background-color: #E76F51; } #conversejs .chat-head-chatroom .chatroom-topic { diff --git a/sass/_chatrooms.scss b/sass/_chatrooms.scss index 93d921c6c..8346da3d8 100644 --- a/sass/_chatrooms.scss +++ b/sass/_chatrooms.scss @@ -1,4 +1,11 @@ #conversejs { + .add-chatroom { + input[type="submit"], + input[type="button"] { + margin: 0.3em 0; + } + } + .chat-head-chatroom { background-color: $chatroom-head-color; diff --git a/sass/pure/_forms.scss b/sass/pure/_forms.scss index 3660acc05..8eb36ab8d 100644 --- a/sass/pure/_forms.scss +++ b/sass/pure/_forms.scss @@ -166,7 +166,7 @@ since IE8 won't execute CSS that contains a CSS3 selector. } .pure-form fieldset { margin: 0; - padding: 0.35em 0 0.75em; + padding: 0.35em 0 0.35em; border: 0; } .pure-form legend { diff --git a/src/converse-muc.js b/src/converse-muc.js index 7349433e6..48987b4c9 100755 --- a/src/converse-muc.js +++ b/src/converse-muc.js @@ -204,7 +204,13 @@ this.occupantsview.model.fetch({add:true}); _.each(['member', 'owner', 'admin'], this.fetchMembersList.bind(this)); - this.join(null, {'maxstanzas': converse.muc_history_max_stanzas}); + var nick = this.model.get('nick'); + if (!nick) { + this.renderNicknameForm(); + } else { + this.join(null, {'maxstanzas': converse.muc_history_max_stanzas}); + } + this.fetchMessages().insertIntoDOM(); // XXX: adding the event below to the events map above doesn't work. // The code that gets executed because of that looks like this: @@ -725,11 +731,39 @@ ); }, + submitNickname: function (ev) { + ev.preventDefault(); + var $nick = this.$el.find('input[name=nick]'); + var nick = $nick.val(); + if (!nick) { + $nick.addClass('error'); + return; + } + else { + $nick.removeClass('error'); + } + this.model.save({'nick': nick}); + this.$el.find('.chatroom-form-container').replaceWith(''); + this.join(null, {'maxstanzas': converse.muc_history_max_stanzas}); + }, + + renderNicknameForm: function () { + this.$('.chatroom-body').children().addClass('hidden'); + this.$('span.centered.spinner').remove(); + this.$('.chatroom-body').append( + converse.templates.chatroom_nickname_form({ + heading: __('Please choose your nickname'), + label_nickname: __('Nickname'), + label_join: __('Enter room') + })); + this.$('.chatroom-form').on('submit', this.submitNickname.bind(this)); + }, + submitPassword: function (ev) { ev.preventDefault(); var password = this.$el.find('.chatroom-form').find('input[type=password]').val(); this.$el.find('.chatroom-form-container').replaceWith(''); - this.join(password); + this.join(password, {'maxstanzas': converse.muc_history_max_stanzas}); }, renderPasswordForm: function () { @@ -909,6 +943,23 @@ } }, + hideSpinner: function () { + /* Check if the spinner is being shown and if so, hide it. + * Also make sure then that the chat area and occupants + * list are both visible. + */ + var that = this; + var $spinner = this.$el.find('.spinner'); + if ($spinner.length) { + $spinner.hide(function () { + $(this).remove(); + that.$el.find('.chat-area').removeClass('hidden'); + that.$el.find('.occupants').removeClass('hidden'); + }); + } + return this; + }, + onChatRoomPresence: function (pres) { var $presence = $(pres), is_self; var nick = this.model.get('nick'); @@ -921,7 +972,7 @@ if (this.model.get('connection_status') !== Strophe.Status.CONNECTED) { this.model.set('connection_status', Strophe.Status.CONNECTED); } - this.showStatusMessages(pres, is_self); + this.hideSpinner().showStatusMessages(pres, is_self); } this.occupantsview.updateOccupantsOnPresence(pres); }, @@ -1408,13 +1459,8 @@ var name, $name, server, $server, jid, - $nick = this.$el.find('input.new-chatroom-nick'), - nick = $nick.val(), chatroom; - if (!nick) { $nick.addClass('error'); } - else { $nick.removeClass('error'); } - if (ev.type === 'click') { name = $(ev.target).text(); jid = $(ev.target).attr('data-room-jid'); @@ -1435,12 +1481,10 @@ return; } } - if (!nick) { return; } chatroom = converse.chatboxviews.showChat({ 'id': jid, 'jid': jid, 'name': name || Strophe.unescapeNode(Strophe.getNodeFromJid(jid)), - 'nick': nick, 'type': 'chatroom', 'box_id': b64_sha1(jid) }); @@ -1498,7 +1542,7 @@ [Strophe.Status.CONNECTING, Strophe.Status.CONNECTED], chatroom.get('connection_status')) ) { - converse.chatboxviews.get(room_jid).join(null); + converse.chatboxviews.get(room_jid).join(null, {'maxstanzas': converse.muc_history_max_stanzas}); } } }; diff --git a/src/converse-templates.js b/src/converse-templates.js index 4548e0625..fb181ca97 100644 --- a/src/converse-templates.js +++ b/src/converse-templates.js @@ -9,6 +9,7 @@ define("converse-templates", [ "tpl!chatroom", "tpl!chatroom_form", "tpl!chatroom_password_form", + "tpl!chatroom_nickname_form", "tpl!chatroom_sidebar", "tpl!chatrooms_tab", "tpl!chats_panel", @@ -69,49 +70,50 @@ define("converse-templates", [ chatroom: arguments[7], chatroom_form: arguments[8], chatroom_password_form: arguments[9], - chatroom_sidebar: arguments[10], - chatrooms_tab: arguments[11], - chats_panel: arguments[12], - choose_status: arguments[13], - contacts_panel: arguments[14], - contacts_tab: arguments[15], - controlbox: arguments[16], - controlbox_toggle: arguments[17], - field: arguments[18], - form_captcha: arguments[19], - form_checkbox: arguments[20], - form_input: arguments[21], - form_select: arguments[22], - form_textarea: arguments[23], - form_username: arguments[24], - group_header: arguments[25], - info: arguments[26], - login_panel: arguments[27], - login_tab: arguments[28], - message: arguments[29], - new_day: arguments[30], - occupant: arguments[31], - pending_contact: arguments[32], - pending_contacts: arguments[33], - register_panel: arguments[34], - register_tab: arguments[35], - registration_form: arguments[36], - registration_request: arguments[37], - requesting_contact: arguments[38], - requesting_contacts: arguments[39], - room_description: arguments[40], - room_item: arguments[41], - room_panel: arguments[42], - roster: arguments[43], - roster_item: arguments[44], - search_contact: arguments[45], - select_option: arguments[46], - status_option: arguments[47], - toggle_chats: arguments[48], - toolbar: arguments[49], - toolbar_otr: arguments[50], - trimmed_chat: arguments[51], - vcard: arguments[52], - chatbox_minimize: arguments[53] + chatroom_nickname_form: arguments[10], + chatroom_sidebar: arguments[11], + chatrooms_tab: arguments[12], + chats_panel: arguments[13], + choose_status: arguments[14], + contacts_panel: arguments[15], + contacts_tab: arguments[16], + controlbox: arguments[17], + controlbox_toggle: arguments[18], + field: arguments[19], + form_captcha: arguments[20], + form_checkbox: arguments[21], + form_input: arguments[22], + form_select: arguments[23], + form_textarea: arguments[24], + form_username: arguments[25], + group_header: arguments[26], + info: arguments[27], + login_panel: arguments[28], + login_tab: arguments[29], + message: arguments[30], + new_day: arguments[31], + occupant: arguments[32], + pending_contact: arguments[33], + pending_contacts: arguments[34], + register_panel: arguments[35], + register_tab: arguments[36], + registration_form: arguments[37], + registration_request: arguments[38], + requesting_contact: arguments[39], + requesting_contacts: arguments[40], + room_description: arguments[41], + room_item: arguments[42], + room_panel: arguments[43], + roster: arguments[44], + roster_item: arguments[45], + search_contact: arguments[46], + select_option: arguments[47], + status_option: arguments[48], + toggle_chats: arguments[49], + toolbar: arguments[50], + toolbar_otr: arguments[51], + trimmed_chat: arguments[52], + vcard: arguments[53], + chatbox_minimize: arguments[54] }; }); diff --git a/src/templates/chatroom_nickname_form.html b/src/templates/chatroom_nickname_form.html new file mode 100644 index 000000000..ac7c9c165 --- /dev/null +++ b/src/templates/chatroom_nickname_form.html @@ -0,0 +1,11 @@ +
+
+
+ + +
+
+ +
+
+
diff --git a/src/templates/room_panel.html b/src/templates/room_panel.html index 2b625d304..9428f9039 100644 --- a/src/templates/room_panel.html +++ b/src/templates/room_panel.html @@ -2,14 +2,11 @@
- - -
-
{[ if (server_input_type != 'hidden') { ]} {{label_server}} + {[ } ]} - +