ChatInputControls = React.createClass({ //#TODO MessageFontSize dynamic change componentDidMount: function() { $('.panel-footer').resizable({ handles: 'n', minHeight: 70, resize(event, ui) { let ref; if($('.panel-footer').css('top') === '0px') { $('.panel-footer').height(70); // prevents the element from shrinking vertically for 1-2 px } else { $('.panel-footer').css('top', `${parseInt($('.panel-footer').css('top'))}${1}px`); } $('#chatbody').height($('#chat').height() - $('.panel-footer').height() - 45); return $('#chatbody').scrollTop((ref = $('#chatbody')[0]) != null ? ref.scrollHeight : void 0); }, start(event, ui) { $('#newMessageInput').css('overflow', ''); return $('.panel-footer').resizable('option', 'maxHeight', Math.max($('.panel-footer').height(), $('#chat').height() / 2)); }, stop(event, ui) { return setInSession('chatInputMinHeight', $('.panel-footer').height() + 1); } }); $('#newMessageInput').on('keydown paste cut', () => { return setTimeout(() => { return this.adjustChatInputHeight(); }, 0); }); }, sendMessage: function() { let chattingWith, color, message, ref, toUsername; message = linkify($('#newMessageInput').val()); // get the message from the input box if(!((message != null ? message.length : void 0) > 0 && (/\S/.test(message)))) { // check the message has content and it is not whitespace return; // do nothing if invalid message } color = "0x000000"; //"0x#{getInSession("messageColor")}" if((chattingWith = getInSession('inChatWith')) !== "PUBLIC_CHAT") { toUsername = (ref = Meteor.Users.findOne({ userId: chattingWith })) != null ? ref.user.name : void 0; BBB.sendPrivateChatMessage(color, "en", message, chattingWith, toUsername); } else { BBB.sendPublicChatMessage(color, "en", message); } return $('#newMessageInput').val(''); // Clear message box }, adjustChatInputHeight: function() { let projectedHeight, ref; if(isLandscape()) { $('#newMessageInput').css('height', 'auto'); projectedHeight = $('#newMessageInput')[0].scrollHeight + 23; if(projectedHeight !== $('.panel-footer').height() && projectedHeight >= getInSession('chatInputMinHeight')) { $('#newMessageInput').css('overflow', 'hidden'); // prevents a scroll bar // resizes the chat input area $('.panel-footer').css('top', `${-(projectedHeight - 70)}px`); $('.panel-footer').css('height', `${projectedHeight}px`); $('#newMessageInput').height($('#newMessageInput')[0].scrollHeight); // resizes the chat messages container $('#chatbody').height($('#chat').height() - projectedHeight - 45); $('#chatbody').scrollTop((ref = $('#chatbody')[0]) != null ? ref.scrollHeight : void 0); } return $('#newMessageInput').css('height', ''); } else if(isPortrait()) { $('.panel-footer').attr('style', ''); $('#chatbody').attr('style', ''); return $('#newMessageInput').attr('style', ''); } }, handleClick: function() { $('#sendMessageButton').blur(); this.sendMessage(); return this.adjustChatInputHeight(); }, // user pressed a button inside the chatbox keyPressedHandler: function(event) { let key; key = event.charCode ? event.charCode : (event.keyCode ? event.keyCode : 0); if(event.shiftKey && (key === 13)) { event.preventDefault(); // append a '\r' carriage return character to the input box dropping the cursor to a new line document.getElementById("newMessageInput").value += CARRIAGE_RETURN; // Change newline character return; } if(key === 13) { // Check for pressing enter to submit message event.preventDefault(); this.sendMessage(); $('#newMessageInput').val(""); return false; } }, publicChatDisabled: function() { let presenter, publicChatIsDisabled, ref, ref1, ref2, userIsLocked; userIsLocked = (ref = Meteor.Users.findOne({ userId: getInSession('userId') })) != null ? ref.user.locked : void 0; publicChatIsDisabled = (ref1 = Meteor.Meetings.findOne({})) != null ? ref1.roomLockSettings.disablePublicChat : void 0; presenter = (ref2 = Meteor.Users.findOne({ userId: getInSession('userId') })) != null ? ref2.user.presenter : void 0; return userIsLocked && publicChatIsDisabled && !presenter; }, privateChatDisabled: function() { let presenter, privateChatIsDisabled, ref, ref1, ref2, userIsLocked; userIsLocked = (ref = Meteor.Users.findOne({ userId: getInSession('userId') })) != null ? ref.user.locked : void 0; privateChatIsDisabled = (ref1 = Meteor.Meetings.findOne({})) != null ? ref1.roomLockSettings.disablePrivateChat : void 0; presenter = (ref2 = Meteor.Users.findOne({ userId: getInSession('userId') })) != null ? ref2.user.presenter : void 0; return userIsLocked && privateChatIsDisabled && !presenter; }, getInputControls: function() { if(this.props.inPrivateChat && this.privateChatDisabled() || !this.props.inPrivateChat && this.publicChatDisabled()){ return ( ); } else { return (
); } }, render(){ return (
{ this.getInputControls() }
); } });