Commit 70a89500 authored by Amin Bandali's avatar Amin Bandali
Browse files

misc: drop remnants of the old and now-unused web chatview

GitLab: #749
Change-Id: Ie58f458d44b1d643632842e2fb44aad19571405b
parent 0ef5cca5
......@@ -22,8 +22,6 @@
#include "qmladapterbase.h"
#include "previewengine.h"
#include "api/chatview.h"
#include <QObject>
#include <QString>
......
......@@ -301,7 +301,6 @@ set(LIBCLIENT_SOURCES
pluginmodel.cpp
namedirectory.cpp
smartinfohub.cpp
chatview.cpp
renderer.cpp)
set(LIBCLIENT_HEADERS
......@@ -327,7 +326,6 @@ set(LIBCLIENT_HEADERS_API
api/account.h
api/avmodel.h
api/behaviorcontroller.h
api/chatview.h
api/call.h
api/contact.h
api/conversation.h
......
/****************************************************************************
* Copyright (C) 2020-2022 Savoir-faire Linux Inc. *
* Author: Sébastien Blin <sebastien.blin@savoirfairelinux.com> *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 2.1 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
***************************************************************************/
#pragma once
// Qt
#include <QObject>
#include <QVariantMap>
#include <QString>
namespace lrc {
namespace api {
namespace chatview {
QVariantMap getTranslatedStrings(bool qwebview = true);
} // namespace chatview
} // namespace api
} // namespace lrc
/****************************************************************************
* Copyright (C) 2020-2022 Savoir-faire Linux Inc. *
* Author: Sébastien Blin <sebastien.blin@savoirfairelinux.com> *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 2.1 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
***************************************************************************/
#include "api/chatview.h"
namespace lrc {
namespace api {
namespace chatview {
QVariantMap
getTranslatedStrings(bool qwebview)
{
return {
{"Hide chat view", QObject::tr("Hide chat view")},
{"Place video call", QObject::tr("Place video call")},
{"Show available plugins", QObject::tr("Show available plugins")},
{"Place audio call", QObject::tr("Place audio call")},
{"Add to conversations", QObject::tr("Add to conversations")},
{"Unban contact", QObject::tr("Unban contact")},
{"Send", QObject::tr("Send")},
{"Options", QObject::tr("Options")},
{"Jump to latest", QObject::tr("Jump to latest")},
{"Send file", QObject::tr("Send file")},
{"Add emoji", QObject::tr("Add emoji")},
{"Leave video message", QObject::tr("Leave video message")},
{"Leave audio message", QObject::tr("Leave audio message")},
{"Block", QObject::tr("Block")},
{"Copy to downloads", QObject::tr("Copy to downloads")},
{"Write to {0}", QObject::tr("Write to {0}")},
{"Note: an interaction will create a new contact.",
QObject::tr("Note: an interaction will create a new contact.")},
{"is not in your contacts", QObject::tr("is not in your contacts")},
{"has sent you a conversation request.",
QObject::tr("has sent you a conversation request.")},
{"Hello, do you want to join the conversation?",
QObject::tr("Hello, do you want to join the conversation?")},
{"You have accepted the conversation request.",
QObject::tr("You have accepted the conversation request.")},
{"We are waiting for another device to synchronize the conversation.",
QObject::tr("We are waiting for another device to synchronize the conversation.")},
{"Note: you can automatically accept this invitation by sending a message.",
QObject::tr("Note: you can automatically accept this invitation by sending a message.")},
{"%d days ago", qwebview ? QObject::tr("{0} days ago") : QObject::tr("%d days ago")},
{"%d hours ago", qwebview ? QObject::tr("{0} hours ago") : QObject::tr("%d hours ago")},
{"%d minutes ago",
qwebview ? QObject::tr("{0} minutes ago") : QObject::tr("%d minutes ago")},
{"one day ago", QObject::tr("one day ago")},
{"one hour ago", QObject::tr("one hour ago")},
{"just now", QObject::tr("just now")},
{"Failure", QObject::tr("Failure")},
{"Accept", QObject::tr("Accept")},
{"Refuse", QObject::tr("Refuse")},
{"Delete", QObject::tr("Delete")},
{"Retry", QObject::tr("Retry")},
{"unjoinable peer", QObject::tr("Unable to make contact")},
{"connecting", QObject::tr("Connecting")},
{"accepted", QObject::tr("Accepted")},
{"canceled", QObject::tr("Canceled")},
{"ongoing", QObject::tr("Ongoing")},
{"awaiting peer", QObject::tr("Waiting for contact")},
{"awaiting host", QObject::tr("Incoming transfer")},
{"awaiting peer timeout", QObject::tr("Timed out waiting for contact")},
{"finished", QObject::tr("Finished")},
};
}
} // namespace chatview
} // namespace api
} // namespace lrc
.internal_mes_wrapper {
margin: 3px 0 0 0;
}
.message_wrapper {
padding: 1em;
}
.sender_image {
margin: 10px;
}
.message_out + .message_out .message_wrapper {
border-top-right-radius: 10px;
}
.message_in + .message_in .message_wrapper {
border-top-left-radius: 10px;
}
.message_in + .message_in .sender_image {
visibility: hidden;
}
.message_out + .message_out .sender_image {
visibility: hidden;
}
.message_text {
hyphens: auto;
word-break: break-word;
word-wrap: break-word;
}
.menuoption {
user-select: none;
cursor: pointer;
}
#sendMessage {
height: var(--navbar-height);
}
#sendMessage .nav-button, #sendMessage .nav-button.deactivated {
height: 28px;
width: 28px;
margin: 1px;
padding: 2px;
}
:root {
/* color definitions */
--jami-light-blue: rgba(59, 193, 211, 0.3);
--jami-dark-blue: #003b4e;
--jami-green: #1ed0a8;
--jami-green-hover: #1ed0a8;
/* main properties */
--bg-color: #ffffff;
/* navbar properties */
--navbar-height: 40px;
--navbar-padding-top: 8px;
--navbar-padding-bottom: var(--navbar-padding-top);
/* message bar properties */
--textarea-max-height: 150px;
--placeholder-text-color: #d3d3d3;
/* button properties */
--action-icon-color: var(--jami-dark-blue);
--deactivated-icon-color: #bebebe;
--action-icon-hover-color: #ededed;
--action-critical-icon-hover-color: rgba(211, 77, 59, 0.3); /* complementary color of jami light blue */
--action-critical-icon-press-color: rgba(211, 77, 59, 0.5);
--action-critical-icon-color: #4E1300;
--action-icon-press-color: rgba(212, 212, 212, 1.0);
--invite-hover-color: white;
--bg-text-input: white;
}
body {
font-family: sans-serif;
}
#container {
max-width: 1000px;
margin: auto;
}
.nav-right {
float: right;
}
/* classic screens */
@media screen and (max-width: 1920px), screen and (max-height: 1080px) {
.message_in {
padding-left: 0px;
}
.message_out {
padding-right: 0px;
}
}
#invite_contact_name {
font-weight: 700;
}
.internal_mes_wrapper {
margin: 0px 0 0 0;
}
.message_wrapper {
padding: 1em;
}
.sender_image {
margin: 10px;
}
.message_out + .message_out .message_wrapper {
border-top-right-radius: 10px;
}
.message_in + .message_in .message_wrapper {
border-top-left-radius: 10px;
}
.message_in + .message_in .sender_image {
visibility: hidden;
}
.message_out + .message_out .sender_image {
visibility: hidden;
}
.message_text {
hyphens: auto;
word-break: break-word;
word-wrap: break-word;
}
.sender_image {
margin: 0px 10px 0px 10px;
}
.message_in .sender_image,
.message_out .sender_image {
visibility: hidden;
}
.message_in.last_of_sequence .sender_image,
.message_in.single_message .sender_image {
visibility: visible;
}
.message_in.last_of_sequence .sender_image {
margin-top: 2px;
}
.message_in.middle_of_sequence .sender_image {
margin-top: 0px;
}
.generated_message.message_in .message_wrapper,
.generated_message.message_out .message_wrapper {
background-color: transparent !important;
border-radius: 0px !important;
}
.single_message.message_in .message_wrapper,
.single_message.message_out .message_wrapper {
border-radius: 20px 20px 20px 20px;
}
.last_of_sequence.message_in .message_wrapper {
border-radius: 4px 20px 20px 20px;
}
.first_of_sequence.message_in .message_wrapper {
border-radius: 20px 20px 20px 4px;
}
.middle_of_sequence.message_in .message_wrapper {
border-radius: 4px 20px 20px 5px;
}
.last_of_sequence.message_out .message_wrapper {
border-radius: 20px 4px 20px 20px;
}
.first_of_sequence.message_out .message_wrapper {
border-radius: 20px 20px 4px 20px;
}
.middle_of_sequence.message_out .message_wrapper {
border-radius: 20px 5px 4px 20px;
}
.middle_of_sequence .internal_mes_wrapper,
.last_of_sequence .internal_mes_wrapper,
.last_message .internal_mes_wrapper {
margin: 0px 0 0 0 !important;
}
.message_out .sender_image {
margin: 8px;
}
.first_of_sequence.message_out .internal_mes_wrapper,
.single_message.message_out .internal_mes_wrapper {
margin: 0px 0 0 0 !important;
}
.sender_image_cell {
vertical-align: bottom;
min-width: 16px;
}
.message_in .sender_image_cell {
min-width: 56px;
}
.dummy_cell {
padding: 0;
}
.timestamp_cell {
padding: 0;
max-width: 0px;
overflow: visible;
white-space: nowrap;
}
.timestamp_cell_out {
padding: 0;
text-align: right;
direction: rtl;
max-width: 0px;
overflow: visible;
white-space: nowrap;
}
table {
border-collapse: collapse;
border-spacing: 0 0px;
margin: 0;
padding: 0;
}
.message_text {
word-break: break-all;
word-wrap: hyphenate;
}
pre {
white-space: pre-wrap;
}
.message:hover:not(.message_type_contact) .menu_interaction {
display: block;
opacity: 1;
}
.message_type_text .internal_mes_wrapper {
padding: 0;
}
.first_of_sequence .internal_mes_wrapper {
padding: 0.1em 0 0 0;
}
.menuoption {
user-select: none;
cursor: pointer;
}
.nav-button {
width: 30px;
height: 30px;
margin: 6px;
padding: 2px;
}
.nav-button.deactivated {
width: 30px;
height: 30px;
margin: 6px;
padding: 2px;
}
#sendMessage {
padding: 7px;
}
#nav-contactid-alias {
font-weight: 500;
font-size: 1em;
font-family: 'Segoe UI Emoji';
}
#nav-contactid-bestId {
font-weight: 100;
font-size: .7em;
font-family: Verdana;
color: #c0c0c0;
}
#typing_indicator_container {
display: none;
padding-bottom: 1.5em !important;
margin-top: 4px;
}
This diff is collapsed.
<html>
<!-- Empty head might be needed for setSenderImage -->
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta charset="utf-8">
</head>
<body>
<div id="wrapperOfNavbar" class="navbar-wrapper">
<div id="navbar">
<div id="backButton" class="nav-button non-action-button nav-left" onmouseover="addBackButtonHoverProperty()"
onclick="backToWelcomeView()">
<svg class="svgicon" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24">
<path d="M0 0h24v24H0z" fill="none" />
<path d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z" />
</svg>
</div>
<div id="nav-contactid" class="nav-left">
<div id="nav-contactid-wrapper">
<div id="nav-contactid-alias"></div>
<div id="nav-contactid-bestId"></div>
</div>
</div>
<div id="optionsButton" style="display:none" class="deactivated nav-button action-button nav-right" onclick="moreOptions()">
<svg class="svgicon" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24">
<path d="M0 0h24v24H0z" fill="none" />
<path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z" />
</svg>
</div>
<div id="placeAudioCallButton" class="nav-button action-button nav-right" onclick="placeAudioCall()">
<svg class="svgicon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path fill="none" d="M0 0h24v24H0z" />
<path d="M20.01 15.38c-1.23 0-2.42-.2-3.53-.56-.35-.12-.74-.03-1.01.24l-1.57 1.97c-2.83-1.35-5.48-3.9-6.89-6.83l1.95-1.66c.27-.28.35-.67.24-1.02-.37-1.11-.56-2.3-.56-3.53 0-.54-.45-.99-.99-.99H4.19C3.65 3 3 3.24 3 3.99 3 13.28 10.73 21 20.01 21c.71 0 .99-.63.99-1.18v-3.45c0-.54-.45-.99-.99-.99z" />
</svg>
</div>
<div id="placeCallButton" class="nav-button action-button nav-right" onclick="placeCall()">
<svg class="svgicon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path d="M0 0h24v24H0z" fill="none" />
<path d="M17 10.5V7c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z" />
</svg>
</div>
<div id="pluginsButton" style="display:none" class="nav-button action-button nav-right" onclick="openPluginHandlersList()">
<svg class="svgicon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path d="M0 0h24v24H0V0z" fill="none" />
<path d="M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7s2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z"/>
</svg>
</div>
<div id="addToConversationsButton" class="nav-button action-button nav-right" onclick="addToConversations()">
<svg class="svgicon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path d="M0 0h24v24H0z" fill="none" />
<path d="M15 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm-9-2V7H4v3H1v2h3v3h2v-3h3v-2H6zm9 4c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z" />
</svg>
</div>
<div id="unbanButton" class="nav-button action-critical-button nav-right" onclick="addBannedContact()">
<svg class="svgicon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path fill="none" d="M0 0h24v24H0V0z" />
<circle cx="15" cy="8" r="4" />
<path d="M23 20v-2c0-2.3-4.1-3.7-6.9-3.9l6 5.9h.9zm-11.6-5.5C9.2 15.1 7 16.3 7 18v2h9.9l4 4 1.3-1.3-21-20.9L0 3.1l4 4V10H1v2h3v3h2v-3h2.9l2.5 2.5zM6 10v-.9l.9.9H6z" />
</svg>
</div>
</div>
</div>
<div id="container">
<div id="invitation" class="column">
<div id="invitation_text_container" class="note_container">
<div id="invitation_text"></div>
</div>
<div id="invitation_rect">
<div id="invite_image"></div>
<div id="quote_img_wrapper">
<svg width="47px" height="30px" viewBox="0 0 47 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="CONVERSATION-À-PLUS" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.7">
<g id="04_JAMI_CONV_Invitation" transform="translate(-702.000000, -310.000000)" fill="#1AB6FF" fill-rule="nonzero">
<g id="noun_Quote_3101618" transform="translate(702.000000, 310.000000)">
<path d="M9.24003238,27.2740291 C8.58821922,28.5250019 9.49495696,30 10.9415649,30 C11.5043326,30 12.0360615,29.7625927 12.4039467,29.349732 C14.4647143,27.033648 21.2225055,18.9494095 21.9282548,11.8341297 C21.9725231,11.4475374 22,11.0554933 22,10.6570059 C22,10.3333588 21.9811732,10.0458928 21.9542052,9.77527819 C21.4499531,3.84207854 15.9418521,-0.717231757 9.52090737,0.0936206879 C4.60101556,0.715637692 0.635182818,4.63161885 0.0734328381,9.40801556 C-0.615525018,15.279757 3.62660323,20.3376721 9.30414515,21.188175 C10.1823883,21.3210042 10.7538061,22.1482124 10.5085493,22.976412 L9.24003238,27.2740291 Z" id="Path"></path>
<path d="M34.2399734,27.2740291 C33.588666,28.5250019 34.4948991,30 35.9415138,30 C36.504284,30 37.0355066,29.7625927 37.4039023,29.349732 C39.4651882,27.033648 46.2225019,18.9494095 46.9287633,11.8341297 C46.972523,11.4475374 47,11.0554933 47,10.6570059 C47,10.3333588 46.9811731,10.0458928 46.954205,9.77527819 C46.4499506,3.84207854 40.9418241,-0.717231757 34.5203408,0.0936206879 C29.6004263,0.715637692 25.6345752,4.63161885 25.0733314,9.40851119 C24.3848792,15.279757 28.6270271,20.3376721 34.3045953,21.188175 C35.1828425,21.3210042 35.7542629,22.1482124 35.509005,22.976412 L34.2399734,27.2740291 Z" id="Path"></path>
</g>
</g>
</g>
</svg>
</div>
<div id="invite_text">
<div id="join_text"></div>
<div id="note_text"></div>
<div id="actions">
<button id="blockButton" class="text-button" onclick="blockConversation()">
</button>
<button id="refuseButton" class="text-button" onclick="refuseInvitation()">
</button>
<button id="acceptButton" class="text-button text-button-green" onclick="acceptInvitation()">
</button>
</div>
</div>
</div>
<div id="invitation_note_container" class="note_container">
<div id="invitation_note"></div>
</div>
</div>
<div id="messages" onscroll="onScrolled()"></div>
<div id="typing_indicator_container"></div>
<div id="back_to_bottom_button_container">
<div id="back_to_bottom_button" onclick="back_to_bottom()">Jump to latest &#9660;
</div>
</div>
<div id="send_inteface_container" onresize="updateBackToBottomContainer()">
<div id="sendMessage">
<div id="sendFileButton" class="nav-button action-button" onclick="selectFileToSend()">
<svg class="svgicon" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<path d="M16.1,5.6c-0.3,0-0.6,0.3-0.6,0.6v11.2c0,1.9-1.6,3.5-3.5,3.5c-1.9,0-3.5-1.6-3.5-3.5V5.5c0-1.2,1-2.3,2.3-2.3 s2.3,1,2.3,2.3v10.6c0,0.6-0.5,1-1,1s-1-0.5-1-1V6.7c0-0.3-0.3-0.6-0.6-0.6c-0.3,0-0.6,0.3-0.6,0.6v9.4c0,1.2,1,2.2,2.2,2.2 s2.2-1,2.2-2.2V5.5c0-1.9-1.6-3.5-3.5-3.5S7.3,3.6,7.3,5.5v11.8c0,2.6,2.1,4.7,4.7,4.7c2.6,0,4.7-2.1,4.7-4.7V6.2 C16.7,5.8,16.4,5.6,16.1,5.6z"/>
</svg>
</div>
<div id="audioRecordButton" class="action-button nav-button" onclick="audioRecord()">
<svg class="svgicon" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<g>
<path d="M19.1,4.9C17.2,3,14.7,2,12,2S6.8,3,4.9,4.9S2,9.3,2,12s1,5.2,2.9,7.1S9.3,22,12,22h10V12C22,9.3,21,6.8,19.1,4.9z M20.6,20.6H12c-2.3,0-4.4-0.9-6.1-2.5c-1.6-1.6-2.5-3.8-2.5-6.1s0.9-4.4,2.5-6.1C7.6,4.3,9.7,3.4,12,3.4s4.4,0.9,6.1,2.5 c1.6,1.6,2.5,3.8,2.5,6.1V20.6z"/>
<path d="M15,10.3c-0.1,0.1-0.2,0.2-0.2,0.4v1.4c0,1.4-1.1,2.5-2.5,2.5s-2.5-1.1-2.5-2.5v-1.4c0-0.1-0.1-0.3-0.2-0.4 c-0.1-0.1-0.2-0.2-0.4-0.2l0,0c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.2-0.2,0.4v1.4c0,1.8,1.3,3.3,3.1,3.6v0.5h-0.9 c-0.3,0-0.5,0.2-0.5,0.5s0.2,0.5,0.5,0.5h2.8c0.3,0,0.5-0.2,0.5-0.5s-0.2-0.5-0.5-0.5h-0.9v-0.5c1.7-0.3,3.1-1.8,3.1-3.6v-1.4 c0-0.1-0.1-0.3-0.2-0.4C15.5,10.2,15.2,10.1,15,10.3z M9.2,10.4L9.2,10.4L9.2,10.4L9.2,10.4L9.2,10.4z"/>
</g>
<g>
<path d="M12.3,13.9c-1,0-1.8-0.8-1.8-1.8V9c0-1,0.8-1.8,1.8-1.8S14.1,8,14.1,9v3.2C14.1,13.2,13.3,13.9,12.3,13.9z M12.3,8.4 c-0.3,0-0.6,0.2-0.6,0.6v3.2c0,0.3,0.2,0.6,0.6,0.6c0.3,0,0.6-0.2,0.6-0.6V9C12.9,8.7,12.6,8.4,12.3,8.4z"/>
</g>
</svg>
</div>
<div id="videoRecordButton" class="nav-button action-button" onclick="videoRecord()">
<svg class="svgicon" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<g>
<path d="M22,22H12c-2.7,0-5.2-1-7.1-2.9C3,17.2,2,14.7,2,12c0-2.7,1-5.2,2.9-7.1S9.3,2,12,2c2.7,0,5.2,1,7.1,2.9 C21,6.8,22,9.3,22,12V22z M12,3.4c-2.3,0-4.4,0.9-6.1,2.5C4.3,7.6,3.4,9.7,3.4,12c0,2.3,0.9,4.4,2.5,6.1c1.6,1.6,3.8,2.5,6.1,2.5 h8.6V12c0-2.3-0.9-4.4-2.5-6.1C16.4,4.3,14.3,3.4,12,3.4z"/>
</g>
<g transform="translate(7.000000, 9.000000)">
<path d="M7.1,7.7H0.4c-0.8,0-1.2-0.5-1.2-1V0.3c0-0.4,0.4-0.9,1.1-1l6.7,0c0.7,0,1.1,0.5,1.1,1v0.6l1.1-0.6C9.6,0,10,0,10.3,0.2 c0.2,0.1,0.5,0.3,0.5,0.8v5c0,0.5-0.3,0.8-0.5,0.9C10,7,9.6,7,9.3,6.8L8.2,6.2v0.6C8.2,7.2,7.8,7.7,7.1,7.7z M0.5,6.4l6.4,0V5.1 c0-0.2,0.1-0.4,0.3-0.6c0.2-0.1,0.4-0.1,0.6,0l1.6,0.9V1.6L7.9,2.5c-0.2,0.1-0.4,0.1-0.6,0C7,2.4,6.9,2.2,6.9,1.9V0.6l-6.4,0V6.4 z M10,5.7L10,5.7C10,5.7,10,5.7,10,5.7z"/>
</g>
</svg>
</div>
<textarea id="message" autofocus onkeyup="grow_text_area()" onkeydown="process_messagebar_keydown()"
dir="auto" rows="1"></textarea>
<div id="emojiButton" class="action-button nav-button">
<svg class="svgicon" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve