From 5795e40573ce413d3153ee15a3e600b268f86638 Mon Sep 17 00:00:00 2001
From: or-else
"},{type:0,value:"¯∖_(ツ)_/¯"}]},(e=>n().createElement(o.default,{connected:this.props.connected,contacts:this.state.contactList,emptyListMessage:e,topicSelected:this.props.topicSelected,myUserId:this.props.myUserId,showOnline:!0,showUnread:!0,onTopicSelected:this.props.onTopicSelected,showContextMenu:this.props.showContextMenu,onAction:this.handleAction})))}}},"./src/views/create-account-view.jsx":function(e,t,s){s.r(t),s.d(t,{default:function(){return p}});var a=s("react"),n=s.n(a),i=s("react-intl"),o=s("./src/widgets/avatar-upload.jsx"),r=s("./src/widgets/checkbox.jsx"),l=s("./src/widgets/visible-password.jsx"),c=s("./src/lib/local-storage.js"),d=s("./src/lib/utils.js"),h=s("./src/config.js");class p extends n().PureComponent{constructor(e){super(e),this.state={login:"",password:"",email:"",fn:"",imageDataUrl:null,errorCleared:!1,saveToken:c.default.getObject("keep-logged-in")},this.handleLoginChange=this.handleLoginChange.bind(this),this.handlePasswordChange=this.handlePasswordChange.bind(this),this.handleEmailChange=this.handleEmailChange.bind(this),this.handleFnChange=this.handleFnChange.bind(this),this.handleImageChanged=this.handleImageChanged.bind(this),this.handleToggleSaveToken=this.handleToggleSaveToken.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}handleLoginChange(e){this.setState({login:e.target.value})}handlePasswordChange(e){this.setState({password:e})}handleEmailChange(e){this.setState({email:e.target.value})}handleFnChange(e){this.setState({fn:e.target.value})}handleImageChanged(e){this.setState({imageDataUrl:e})}handleToggleSaveToken(){c.default.setObject("keep-logged-in",!this.state.saveToken),this.setState({saveToken:!this.state.saveToken})}handleSubmit(e){e.preventDefault(),this.setState({errorCleared:!1}),this.props.onCreateAccount(this.state.login.trim(),this.state.password.trim(),(0,d.vcard)(this.state.fn.trim().substring(0,h.MAX_TITLE_LENGTH),this.state.imageDataUrl),{meth:"email",val:this.state.email})}render(){let e="blue";return this.props.disabled&&(e+=" disabled"),n().createElement("form",{className:"panel-form-column",onSubmit:this.handleSubmit},n().createElement("div",{className:"panel-form-row"},n().createElement("div",{className:"panel-form-column"},n().createElement(i.FormattedMessage,{id:"login_prompt"},(e=>n().createElement("input",{type:"text",placeholder:e,autoComplete:"user-name",value:this.state.login,onChange:this.handleLoginChange,required:!0,autoFocus:!0}))),n().createElement(i.FormattedMessage,{id:"password_prompt"},(e=>n().createElement(l.default,{placeholder:e,autoComplete:"new-password",value:this.state.password,onFinished:this.handlePasswordChange,required:!0})))),n().createElement(o.default,{onImageChanged:this.handleImageChanged,onError:this.props.onError})),n().createElement("div",{className:"panel-form-row"},n().createElement(i.FormattedMessage,{id:"full_name_prompt",defaultMessage:[{type:0,value:"Full name, e.g. John Doe"}]},(e=>n().createElement("input",{type:"text",placeholder:e,autoComplete:"name",value:this.state.fn,onChange:this.handleFnChange,required:!0})))),n().createElement("div",{className:"panel-form-row"},n().createElement(i.FormattedMessage,{id:"email_prompt",defaultMessage:[{type:0,value:"Email, e.g. jdoe@example.com"}]},(e=>n().createElement("input",{type:"email",placeholder:e,autoComplete:"email",value:this.state.email,onChange:this.handleEmailChange,required:!0})))),n().createElement("div",{className:"panel-form-row"},n().createElement(r.default,{id:"save-token",name:"save-token",checked:this.state.saveToken,onChange:this.handleToggleSaveToken}),n().createElement(i.FormattedMessage,{id:"stay_logged_in"},(e=>n().createElement("label",{htmlFor:"save-token"}," ",e)))),n().createElement("div",{className:"dialog-buttons"},n().createElement("button",{className:e,type:"submit"},n().createElement(i.FormattedMessage,{id:"button_sign_up",defaultMessage:[{type:0,value:"Sign up"}]}))))}}},"./src/views/edit-account-view.jsx":function(e,t,s){s.r(t),s.d(t,{default:function(){return l}});var a=s("react"),n=s.n(a),i=s("react-intl"),o=s("./src/widgets/avatar-upload.jsx"),r=s("./src/lib/blob-helpers.js");class l extends n().Component{constructor(e){super(e);const t=this.props.tinode.getMeTopic();this.state={fullName:t.public?t.public.fn:void 0,avatar:(0,r.makeImageUrl)(t.public?t.public.photo:null)}}render(){return n().createElement("div",{className:"scrollable-panel"},n().createElement("div",{className:"panel-form-row"},n().createElement("div",{className:"panel-form-column"},n().createElement("label",{className:"small"},n().createElement(i.FormattedMessage,{id:"label_your_name",defaultMessage:[{type:0,value:"Your name"}]})),n().createElement("div",{className:"large"},this.state.fullName),n().createElement("div",null,n().createElement("label",{className:"small"},n().createElement(i.FormattedMessage,{id:"label_user_id",defaultMessage:[{type:0,value:"ID:"}]}))," ",n().createElement("tt",null,this.props.myUserId))),n().createElement(o.default,{avatar:this.state.avatar,readOnly:!this.state.owner,uid:this.props.myUserId,title:this.state.fullName})),n().createElement("div",{className:"panel-form-row"},n().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onBasicNavigate("general")}},n().createElement("i",{className:"material-icons"},"edit")," ",n().createElement(i.FormattedMessage,{id:"button_edit",defaultMessage:[{type:0,value:"Edit"}]}))),n().createElement("div",{className:"hr"}),n().createElement("div",{className:"panel-form-column"},n().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onBasicNavigate("notif")}},n().createElement("i",{className:"material-icons"},"notifications")," ",n().createElement(i.FormattedMessage,{id:"sidepanel_title_acc_notifications"})),n().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onBasicNavigate("security")}},n().createElement("i",{className:"material-icons"},"security")," ",n().createElement(i.FormattedMessage,{id:"sidepanel_title_acc_security"})),n().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onBasicNavigate("support")}},n().createElement("i",{className:"material-icons"},"contact_support")," ",n().createElement(i.FormattedMessage,{id:"sidepanel_title_acc_support"}))))}}},"./src/views/info-view.jsx":function(e,t,s){s.r(t);var a=s("react"),n=s.n(a),i=s("react-intl"),o=s("tinode-sdk"),r=s.n(o),l=s("./src/widgets/avatar-upload.jsx"),c=s("./src/widgets/checkbox.jsx"),d=s("./src/widgets/contact-list.jsx"),h=s("./src/widgets/error-panel.jsx"),p=s("./src/widgets/group-manager.jsx"),u=s("./src/widgets/in-place-edit.jsx"),m=s("./src/widgets/menu-cancel.jsx"),_=s("./src/widgets/more-button.jsx"),g=s("./src/widgets/permissions-editor.jsx"),b=s("./src/widgets/tag-manager.jsx"),v=s("./src/config.js"),f=s("./src/lib/blob-helpers.js"),E=s("./src/lib/utils.js");const w=(0,i.defineMessages)({requested:{id:"requested_permissions",defaultMessage:[{type:0,value:"Requested"}]},granted:{id:"granted_permissions",defaultMessage:[{type:0,value:"Granted"}]},edit_permissions:{id:"menu_item_edit_permissions",defaultMessage:[{type:0,value:"Edit permissions"}]},other_user:{id:"label_other_user",defaultMessage:[{type:0,value:"Other"}]},clear_messages:{id:"action_clear_messages",defaultMessage:[{type:0,value:"Clear Messages"}]},clear_messages_warning:{id:"clear_messages_warning",defaultMessage:[{type:0,value:"Are you sure you want to clear all messages? It cannot be undone."}]},delete_messages:{id:"action_delete_messages",defaultMessage:[{type:0,value:"Clear Messages for All"}]},delete_messages_warning:{id:"delete_messages_warning",defaultMessage:[{type:0,value:"Are you sure you want to delete all messages for everyone? It cannot be undone."}]},leave_chat:{id:"action_leave_chat",defaultMessage:[{type:0,value:"Leave Conversation"}]},leave_chat_warning:{id:"leave_chat_warning",defaultMessage:[{type:0,value:"Are you sure you want to leave this conversation?"}]},block_contact:{id:"action_block_contact",defaultMessage:[{type:0,value:"Block Contact"}]},block_contact_warning:{id:"block_contact_warning",defaultMessage:[{type:0,value:"Are you sure you want to block this contact?"}]},report_chat:{id:"action_report_chat",defaultMessage:[{type:0,value:"Report Conversation"}]},report_chat_warning:{id:"report_chat_warning",defaultMessage:[{type:0,value:"Are you sure you want to block and report this conversation?"}]}});class S extends n().Component{constructor(e){super(e),this.state={topic:null,owner:!1,admin:!1,sharer:!1,deleter:!1,muted:!1,address:null,groupTopic:void 0,channel:void 0,fullName:void 0,avatar:null,private:null,selectedContact:null,access:null,modeGiven:null,modeWant:null,modeGiven2:null,modeWant2:null,auth:null,anon:null,contactList:[],tags:[],showMemberPanel:!1,showPermissionEditorFor:void 0,moreInfoExpanded:!1,previousMetaDesc:void 0,previousSubsUpdated:void 0,previousTagsUpdated:void 0},this.resetSubs=this.resetSubs.bind(this),this.resetDesc=this.resetDesc.bind(this),this.onMetaDesc=this.onMetaDesc.bind(this),this.onSubsUpdated=this.onSubsUpdated.bind(this),this.onTagsUpdated=this.onTagsUpdated.bind(this),this.handleFullNameUpdate=this.handleFullNameUpdate.bind(this),this.handlePrivateUpdate=this.handlePrivateUpdate.bind(this),this.handleImageChanged=this.handleImageChanged.bind(this),this.handleMuted=this.handleMuted.bind(this),this.handlePermissionsChanged=this.handlePermissionsChanged.bind(this),this.handleLaunchPermissionsEditor=this.handleLaunchPermissionsEditor.bind(this),this.handleHidePermissionsEditor=this.handleHidePermissionsEditor.bind(this),this.handleShowAddMembers=this.handleShowAddMembers.bind(this),this.handleHideAddMembers=this.handleHideAddMembers.bind(this),this.handleMemberUpdateRequest=this.handleMemberUpdateRequest.bind(this),this.handleDeleteMessages=this.handleDeleteMessages.bind(this),this.handleLeave=this.handleLeave.bind(this),this.handleBlock=this.handleBlock.bind(this),this.handleReport=this.handleReport.bind(this),this.handleMemberSelected=this.handleMemberSelected.bind(this),this.handleMoreInfo=this.handleMoreInfo.bind(this),this.handleTagsUpdated=this.handleTagsUpdated.bind(this),this.handleContextMenu=this.handleContextMenu.bind(this)}componentDidUpdate(e){const t=this.props.tinode.getTopic(e.topic);t&&(this.onMetaDesc!=t.onMetaDesc&&(this.previousMetaDesc=t.onMetaDesc,t.onMetaDesc=this.onMetaDesc,this.previousSubsUpdated=t.onSubsUpdated,t.onSubsUpdated=this.onSubsUpdated,"grp"==t.getType()?(this.previousTagsUpdated=t.onTagsUpdated,t.onTagsUpdated=this.onTagsUpdated):this.previousTagsUpdated=void 0),this.state.topic!=e.topic&&(this.setState({topic:e.topic}),this.resetDesc(t,e),this.resetSubs(t,e)))}componentWillUnmount(){const e=this.props.tinode.getTopic(this.props.topic);e&&(this.setState({topic:null}),e.onMetaDesc=this.previousMetaDesc,e.onSubsUpdated=this.previousSubsUpdated,e.onTagsUpdated=this.previousTagsUpdated)}resetSubs(e,t){const s={contactList:[]};if("p2p"==e.getType()){const a=e.subscriber(t.topic);a?(s.modeGiven2=a.acs.getGiven(),s.modeWant2=a.acs.getWant()):(s.modeGiven2=v.NO_ACCESS_MODE,s.modeWant2=v.NO_ACCESS_MODE)}else e.subscribers((e=>{s.contactList.push(e)}),this);this.setState(s)}resetDesc(e,t){const s=e.getDefaultAccess()||{},a=e.getAccessMode();this.setState({owner:a&&a.isOwner(),admin:a&&a.isAdmin(),sharer:a&&a.isSharer(),deleter:a&&a.isDeleter(),muted:a&&a.isMuted(),fullName:e.public?e.public.fn:void 0,avatar:(0,f.makeImageUrl)(e.public?e.public.photo:null),private:e.private?e.private.comment:null,address:e.name,groupTopic:"grp"==e.getType(),channel:e.isChannel(),showMemberPanel:!1,access:a?a.getMode():void 0,modeGiven:a?a.getGiven():void 0,modeWant:a?a.getWant():void 0,auth:s.auth,anon:s.anon}),"grp"==e.getType()&&a&&a.isOwner()&&e.getMeta(e.startMetaQuery().withTags().build())}onMetaDesc(e){const t=this.props.tinode.getTopic(this.props.topic);t&&(this.resetDesc(t,this.props),this.previousMetaDesc&&this.previousMetaDesc!=this.onMetaDesc&&this.previousMetaDesc(e))}onSubsUpdated(e){const t=this.props.tinode.getTopic(this.props.topic);t&&(this.resetSubs(t,this.props),this.previousSubsUpdated&&this.previousSubsUpdated!=this.onSubsUpdated&&this.previousSubsUpdated(e))}onTagsUpdated(e){this.setState({tags:e}),this.previousTagsUpdated&&this.previousTagsUpdated!=this.onTagsUpdated&&this.previousTagsUpdated()}handleFullNameUpdate(e){e=e.trim().substring(0,v.MAX_TITLE_LENGTH),this.state.fullName!==e&&(this.setState({fullName:e}),this.props.onTopicDescUpdate(this.props.topic,(0,E.vcard)(e,null),null))}handlePrivateUpdate(e){e=e.trim().substring(0,v.MAX_TITLE_LENGTH),this.state.private!==e&&(this.setState({private:e}),this.props.onTopicDescUpdate(this.props.topic,null,e||r().DEL_CHAR))}handleImageChanged(e){this.setState({avatar:e}),this.props.onTopicDescUpdate(this.props.topic,(0,E.vcard)(null,e||r().DEL_CHAR),null)}handleMuted(e,t){this.setState({muted:t}),this.props.onChangePermissions(this.props.topic,t?"-P":"+P")}handlePermissionsChanged(e){switch(this.state.showPermissionEditorFor){case"auth":this.props.onTopicDescUpdate(this.props.topic,null,null,{auth:e});break;case"anon":this.props.onTopicDescUpdate(this.props.topic,null,null,{anon:e});break;case"mode":case"want":this.props.onChangePermissions(this.props.topic,e);break;case"given":this.props.onChangePermissions(this.props.topic,e,this.props.topic);break;case"user":this.props.onChangePermissions(this.props.topic,e,this.state.userPermissionsEdited)}this.setState({showPermissionEditorFor:void 0})}handleLaunchPermissionsEditor(e,t){const{formatMessage:s}=this.props.intl;let a,n,i,o,l,c,d;switch(e){case"mode":a=this.state.access;break;case"want":a=this.state.modeWant,n=this.state.modeGiven,this.state.owner?i="O":(i=r().AccessMode.encode(r().AccessMode.diff("ASDO",this.state.modeGiven)),this.state.channel&&(i+="W")),o=s(w.requested),l=s(w.granted);break;case"given":a=this.state.modeGiven2,n=this.state.modeWant2,i=this.state.groupTopic?this.state.owner?"":"O":"ASDO",o=s(w.granted),l=s(w.requested);break;case"auth":a=this.state.auth,i="O";break;case"anon":a=this.state.anon,i="O";break;case"user":{const e=this.props.tinode.getTopic(this.props.topic);if(!e)return;const r=e.subscriber(t);if(!r||!r.acs)return;a=r.acs.getGiven(),n=r.acs.getWant(),i=this.state.owner?"":"O",o=s(w.granted),l=s(w.requested),r.public&&(c=r.public.fn,d=r.public.photo);break}default:console.log("Unknown permission editing mode '"+e+"'")}this.setState({showPermissionEditorFor:e,userPermissionsEdited:t,userPermissionsTitle:c,userPermissionsAvatar:d,editedPermissions:a,immutablePermissions:n,editedPermissionsTitle:o,immutablePermissionsTitle:l,editedPermissionsSkipped:i})}handleHidePermissionsEditor(){this.setState({showPermissionEditorFor:void 0})}handleShowAddMembers(e){e.preventDefault(),this.props.onInitFind(),this.setState({showMemberPanel:!0})}handleHideAddMembers(){this.setState({showMemberPanel:!1})}handleMemberUpdateRequest(e,t,s){this.props.onMemberUpdateRequest(this.props.topic,t,s),this.setState({showMemberPanel:!1})}handleDeleteMessages(e){e.preventDefault();const{formatMessage:t}=this.props.intl;this.props.onShowAlert(t(this.state.deleter?w.delete_messages:w.clear_messages),t(this.state.deleter?w.delete_messages_warning:w.clear_messages_warning),(()=>{this.props.onDeleteMessages(this.props.topic)}),null,!0,null)}handleLeave(e){e.preventDefault();const{formatMessage:t}=this.props.intl;this.props.onShowAlert(t(w.leave_chat),t(w.leave_chat_warning),(()=>{this.props.onLeaveTopic(this.props.topic)}),null,!0,null)}handleBlock(e){e.preventDefault();const{formatMessage:t}=this.props.intl;this.props.onShowAlert(t(w.block_contact),t(w.block_contact_warning),(()=>{this.props.onBlockTopic(this.props.topic)}),null,!0,null)}handleReport(e){e.preventDefault();const{formatMessage:t}=this.props.intl;this.props.onShowAlert(t(w.report_chat),t(w.report_chat_warning),(()=>{this.props.onReportTopic(this.props.topic)}),null,!0,null)}handleMemberSelected(e){this.setState({selectedContact:e})}handleMoreInfo(e){this.setState({moreInfoExpanded:e})}handleTagsUpdated(e){(0,E.arrayEqual)(this.state.tags.slice(0),e.slice(0))||this.props.onTopicTagsUpdate(this.props.topic,e)}handleContextMenu(e){const{formatMessage:t}=this.props.intl,s=this,a=this.props.tinode.getTopic(this.props.topic);if(!a)return;const n=a.subscriber(e.topicName);if(!n||!n.acs)return;const i=[{title:t(w.edit_permissions),handler:function(){s.handleLaunchPermissionsEditor("user",e.topicName)}},"member_delete",n.acs.isMuted()?"member_unmute":"member_mute",n.acs.isJoiner()?"member_block":"member_unblock"];this.props.showContextMenu({topicName:this.props.topic,x:e.x,y:e.y,user:e.topicName},i)}render(){const{formatMessage:e}=this.props.intl;return n().createElement("div",{id:"info-view"},n().createElement("div",{className:"caption-panel",id:"info-caption-panel"},n().createElement("div",{className:"panel-title",id:"info-title"},n().createElement(i.FormattedMessage,{id:"title_info",defaultMessage:[{type:0,value:"Info"}]})),n().createElement("div",null,n().createElement(m.default,{onCancel:this.props.onCancel}))),this.props.displayMobile?n().createElement(h.default,{level:this.props.errorLevel,text:this.props.errorText,onClearError:this.props.onError}):null,this.state.showMemberPanel?n().createElement(p.default,{members:this.state.contactList,requiredMember:this.props.myUserId,keepInitialMembers:!this.state.admin&&!this.state.owner,myUserId:this.props.myUserId,contacts:this.props.searchableContacts,onCancel:this.handleHideAddMembers,onSubmit:this.handleMemberUpdateRequest}):this.state.showPermissionEditorFor?n().createElement(g.default,{mode:this.state.editedPermissions,compare:this.state.immutablePermissions,skip:this.state.editedPermissionsSkipped,modeTitle:this.state.editedPermissionsTitle,compareTitle:this.state.immutablePermissionsTitle,userTitle:this.state.userPermissionsTitle,item:this.state.userPermissionsEdited,userAvatar:this.state.userPermissionsAvatar,onSubmit:this.handlePermissionsChanged,onCancel:this.handleHidePermissionsEditor}):n().createElement("div",{id:"info-view-content",className:"scrollable-panel"},n().createElement("div",{className:"panel-form-row"},n().createElement("div",{className:"panel-form-column"},n().createElement("div",null,n().createElement("label",{className:"small"},n().createElement(i.FormattedMessage,{id:"label_topic_name",defaultMessage:[{type:0,value:"Name"}]}))),n().createElement("div",null,n().createElement(u.default,{placeholder:this.state.groupTopic?"Group name":n().createElement("i",null,"Unknown"),readOnly:!this.state.owner,value:this.state.fullName,required:!0,onFinished:this.handleFullNameUpdate})),n().createElement("div",null,n().createElement("label",{className:"small"},n().createElement(i.FormattedMessage,{id:"label_private",defaultMessage:[{type:0,value:"Private comment"}]}))),n().createElement("div",null,n().createElement(i.FormattedMessage,{id:"private_editing_placeholder",defaultMessage:[{type:0,value:"Visible to you only"}]},(e=>n().createElement(u.default,{placeholder:e,value:this.state.private,onFinished:this.handlePrivateUpdate}))))),n().createElement(l.default,{avatar:this.state.avatar,readOnly:!this.state.owner,uid:this.props.topic,title:this.state.fullName,onImageChanged:this.handleImageChanged,onError:this.props.onError})),n().createElement("div",{className:"hr"}),n().createElement("div",{className:"panel-form-column"},n().createElement("div",{className:"panel-form-row"},n().createElement("label",null,n().createElement(i.FormattedMessage,{id:"label_muting_topic",defaultMessage:[{type:0,value:"Muted:"}]})),n().createElement(c.default,{name:"P",checked:this.state.muted,onChange:this.handleMuted})),n().createElement(i.FormattedMessage,{id:"action_more",defaultMessage:[{type:0,value:"More"}]},(e=>n().createElement(_.default,{title:e,open:this.state.moreInfoExpanded,onToggle:this.handleMoreInfo}))),this.state.moreInfoExpanded?n().createElement("div",{className:"panel-form-column"},n().createElement("div",{className:"panel-form-row"},n().createElement("label",null,n().createElement(i.FormattedMessage,{id:"label_user_id"})),n().createElement("tt",null,this.state.address)),this.state.groupTopic?n().createElement("div",{className:"panel-form-row"},n().createElement("label",null,n().createElement(i.FormattedMessage,{id:"label_your_permissions",defaultMessage:[{type:0,value:"Your permissions:"}]})),n().createElement("tt",{className:"clickable",onClick:this.handleLaunchPermissionsEditor.bind(this,"want")},this.state.access)):n().createElement("div",null,n().createElement("div",null,n().createElement("label",{className:"small"},n().createElement(i.FormattedMessage,{id:"label_permissions",defaultMessage:[{type:0,value:"Permissions:"}]}))),n().createElement("div",{className:"quoted"},n().createElement("div",null,n().createElement(i.FormattedMessage,{id:"label_you",defaultMessage:[{type:0,value:"You:"}]})," ",n().createElement("tt",{className:"clickable",onClick:this.handleLaunchPermissionsEditor.bind(this,"want")},this.state.access)),n().createElement("div",null,this.state.fullName?this.state.fullName:e(w.other_user),": ",n().createElement("tt",{className:"clickable",onClick:this.handleLaunchPermissionsEditor.bind(this,"given")},this.state.modeGiven2)))),this.state.sharer&&(this.state.auth||this.state.anon)?n().createElement("div",null,n().createElement("div",null,n().createElement("label",{className:"small"},n().createElement(i.FormattedMessage,{id:"label_default_access",defaultMessage:[{type:0,value:"Default access mode:"}]}))),n().createElement("div",{className:"quoted"},n().createElement("div",null,"Auth: ",this.state.admin?n().createElement("tt",{className:"clickable",onClick:this.handleLaunchPermissionsEditor.bind(this,"auth")},this.state.auth):n().createElement("tt",null,this.state.auth)),n().createElement("div",null,"Anon: ",this.state.admin?n().createElement("tt",{className:"clickable",onClick:this.handleLaunchPermissionsEditor.bind(this,"anon")},this.state.anon):n().createElement("tt",null,this.state.anon)))):null):null),n().createElement("div",{className:"hr"}),this.state.owner?n().createElement(n().Fragment,null,n().createElement(i.FormattedMessage,{id:"title_tag_manager"},(e=>n().createElement(b.default,{title:e,tags:this.state.tags,activated:!1,tinode:this.props.tinode,onSubmit:this.handleTagsUpdated}))),n().createElement("div",{className:"hr"})):null,n().createElement("div",{className:"panel-form-column"},this.state.channel?null:n().createElement("a",{href:"#",className:"flat-button",onClick:this.handleDeleteMessages},n().createElement("i",{className:"material-icons"},"delete_outline")," ",e(this.state.deleter?w.delete_messages:w.clear_messages)),n().createElement("a",{href:"#",className:"red flat-button",onClick:this.handleLeave},n().createElement("i",{className:"material-icons"},"exit_to_app")," ",e(w.leave_chat)),this.state.groupTopic?null:n().createElement("a",{href:"#",className:"red flat-button",onClick:this.handleBlock},n().createElement("i",{className:"material-icons"},"block")," ",e(w.block_contact)),this.state.owner?null:n().createElement("a",{href:"#",className:"red flat-button",onClick:this.handleReport},n().createElement("i",{className:"material-icons"},"report")," ",e(w.report_chat))),this.state.groupTopic&&this.state.sharer?n().createElement(n().Fragment,null,n().createElement("div",{className:"hr"}),n().createElement("div",{className:"panel-form-column"},n().createElement("div",{className:"panel-form-row"},n().createElement("label",{className:"small"},n().createElement(i.FormattedMessage,{id:"label_group_members",defaultMessage:[{type:0,value:"Group members:"}]}))),n().createElement("div",{className:"panel-form-row"},n().createElement("a",{href:"#",className:"flat-button",onClick:this.handleShowAddMembers},n().createElement("i",{className:"material-icons"},"person_add")," ",n().createElement(i.FormattedMessage,{id:"button_add_members",defaultMessage:[{type:0,value:"Add members"}]}))),n().createElement(i.FormattedMessage,{id:"group_has_no_members",defaultMessage:[{type:0,value:"No members"}]},(e=>n().createElement(d.default,{contacts:this.state.contactList,myUserId:this.props.myUserId,emptyListMessage:e,topicSelected:this.state.selectedContact,showOnline:!1,showUnread:!1,showMode:!0,noScroll:!0,onTopicSelected:this.handleMemberSelected,showContextMenu:!!this.state.admin&&this.handleContextMenu}))))):null))}}t.default=(0,i.injectIntl)(S)},"./src/views/login-view.jsx":function(e,t,s){s.r(t),s.d(t,{default:function(){return c}});var a=s("react"),n=s.n(a),i=s("react-intl"),o=s("./src/widgets/checkbox.jsx"),r=s("./src/widgets/visible-password.jsx"),l=s("./src/lib/local-storage.js");class c extends n().Component{constructor(e){super(e),this.state={login:e.login,password:"",hostName:e.serverAddress,saveToken:l.default.getObject("keep-logged-in")},this.handleLoginChange=this.handleLoginChange.bind(this),this.handlePasswordChange=this.handlePasswordChange.bind(this),this.handleToggleSaveToken=this.handleToggleSaveToken.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}handleLoginChange(e){this.setState({login:e.target.value})}handlePasswordChange(e){this.setState({password:e.target.value})}handleToggleSaveToken(){l.default.setObject("keep-logged-in",!this.state.saveToken),this.setState({saveToken:!this.state.saveToken})}handleSubmit(e){e.preventDefault(),this.props.onLogin(this.state.login.trim(),this.state.password.trim())}render(){var e="blue";return this.props.disabled&&(e+=" disabled"),n().createElement("form",{id:"login-form",onSubmit:this.handleSubmit},n().createElement(i.FormattedMessage,{id:"login_prompt",defaultMessage:[{type:0,value:"Login"}]},(e=>n().createElement("input",{type:"text",id:"inputLogin",placeholder:e,autoComplete:"username",autoCorrect:"off",autoCapitalize:"none",value:this.state.login,onChange:this.handleLoginChange,required:!0,autoFocus:!0}))),n().createElement(i.FormattedMessage,{id:"password_prompt",defaultMessage:[{type:0,value:"Password"}]},(e=>n().createElement(r.default,{type:"password",id:"inputPassword",placeholder:e,autoComplete:"current-password",value:this.state.password,onChange:this.handlePasswordChange,required:!0}))),n().createElement("div",{className:"panel-form-row"},n().createElement(o.default,{id:"save-token",name:"save-token",checked:this.state.saveToken,onChange:this.handleToggleSaveToken}),n().createElement("label",{htmlFor:"save-token"}," ",n().createElement(i.FormattedMessage,{id:"stay_logged_in",defaultMessage:[{type:0,value:"Stay logged in"}]})),n().createElement("a",{href:"#reset"},n().createElement(i.FormattedMessage,{id:"forgot_password_link",defaultMessage:[{type:0,value:"Forgot password?"}]}))),n().createElement("div",{className:"dialog-buttons"},n().createElement("button",{className:e,type:"submit"},n().createElement(i.FormattedMessage,{id:"button_sign_in",defaultMessage:[{type:0,value:"Sign in"}]}))))}}},"./src/views/logo-view.jsx":function(e,t,s){s.r(t),s.d(t,{default:function(){return c}});var a=s("react"),n=s.n(a),i=s("react-intl"),o=s("tinode-sdk"),r=s.n(o),l=s("./src/config.js");class c extends n().PureComponent{render(){const e=l.APP_NAME+" ("+r().getLibrary()+")";return n().createElement("div",{id:"dummy-view"},n().createElement("div",null,n().createElement("a",{href:"https://github.com/tinode/chat/"},n().createElement("img",{id:"logo",alt:"logo",src:"img/logo.svg"}),n().createElement("h2",null,"Tinode Web")),n().createElement("p",null,n().createElement(i.FormattedMessage,{id:"label_client",defaultMessage:[{type:0,value:"Client:"}]})," ",e),n().createElement("p",null,n().createElement(i.FormattedMessage,{id:"label_server",defaultMessage:[{type:0,value:"Server:"}]})," ",this.props.serverVersion," (",this.props.serverAddress,")")))}}},"./src/views/messages-view.jsx":function(e,t,s){s.r(t);var a=s("react"),n=s.n(a),i=s("react-intl"),o=s("tinode-sdk"),r=s.n(o),l=s("./src/widgets/chat-message.jsx"),c=s("./src/widgets/doc-preview.jsx"),d=s("./src/widgets/error-panel.jsx"),h=s("./src/widgets/group-subs.jsx"),p=s("./src/widgets/image-preview.jsx"),u=s("./src/widgets/invitation.jsx"),m=s("./src/widgets/letter-tile.jsx"),_=s("./src/widgets/load-spinner.jsx"),g=s("./src/views/logo-view.jsx"),b=s("./src/widgets/send-message.jsx"),v=s("./src/config.js"),f=s("./src/lib/blob-helpers.js"),E=s("./src/lib/navigation.js"),w=s("./src/lib/strformat.js");const S=r().Drafty,C=(0,i.defineMessages)({online_now:{id:"online_now",defaultMessage:[{type:0,value:"online now"}]},last_seen:{id:"last_seen_timestamp",defaultMessage:[{type:0,value:"Last seen"}]},not_found:{id:"title_not_found",defaultMessage:[{type:0,value:"Not found"}]},channel:{id:"channel",defaultMessage:[{type:0,value:"channel"}]}});function M(e){if(e){const t=e.getExcessive()||"";return e.isJoiner("given")&&(t.includes("R")||t.includes("W"))}return!1}function y(e){if(e){const t=e.getMissing()||"";return e.isJoiner("want")&&(t.includes("R")||t.includes("W"))}return!1}class k extends n().Component{constructor(e){super(e),this.state=k.getDerivedStateFromProps(e,{}),this.leave=this.leave.bind(this),this.sendImageAttachment=this.sendImageAttachment.bind(this),this.sendFileAttachment=this.sendFileAttachment.bind(this),this.sendKeyPress=this.sendKeyPress.bind(this),this.handleScrollReference=this.handleScrollReference.bind(this),this.handleScrollEvent=this.handleScrollEvent.bind(this),this.handleDescChange=this.handleDescChange.bind(this),this.handleSubsUpdated=this.handleSubsUpdated.bind(this),this.handleNewMessage=this.handleNewMessage.bind(this),this.handleAllMessagesReceived=this.handleAllMessagesReceived.bind(this),this.handleInfoReceipt=this.handleInfoReceipt.bind(this),this.handleImagePostview=this.handleImagePostview.bind(this),this.handleClosePreview=this.handleClosePreview.bind(this),this.handleFormResponse=this.handleFormResponse.bind(this),this.handleContextClick=this.handleContextClick.bind(this),this.handleShowContextMenuMessage=this.handleShowContextMenuMessage.bind(this),this.handleNewChatAcceptance=this.handleNewChatAcceptance.bind(this),this.handleEnablePeer=this.handleEnablePeer.bind(this),this.handleAttachFile=this.handleAttachFile.bind(this),this.handleAttachImage=this.handleAttachImage.bind(this),this.handleCancelUpload=this.handleCancelUpload.bind(this),this.postReadNotification=this.postReadNotification.bind(this),this.clearNotificationQueue=this.clearNotificationQueue.bind(this),this.readNotificationQueue=[],this.readNotificationTimer=null}componentDidMount(){this.messagesScroller&&this.messagesScroller.addEventListener("scroll",this.handleScrollEvent)}componentWillUnmount(){this.messagesScroller&&this.messagesScroller.removeEventListener("scroll",this.handleScrollEvent),this.clearNotificationQueue()}componentDidUpdate(e,t){this.messagesScroller&&(t.topic!=this.state.topic||t.messages.length!=this.state.messages.length?this.messagesScroller.scrollTop=this.messagesScroller.scrollHeight-this.state.scrollPosition:e.viewportHeight>this.props.viewportHeight&&(this.messagesScroller.scrollTop+=e.viewportHeight-this.props.viewportHeight));const s=this.props.tinode.getTopic(this.state.topic);if(this.state.topic!=t.topic&&(t.topic&&!r().isNewGroupTopicName(t.topic)&&this.leave(t.topic),s&&(s.onData=this.handleNewMessage,s.onAllMessagesReceived=this.handleAllMessagesReceived,s.onInfo=this.handleInfoReceipt,s.onMetaDesc=this.handleDescChange,s.onSubsUpdated=this.handleSubsUpdated,s.onPres=this.handleSubsUpdated)),this.props.applicationVisible?this.postReadNotification(0):this.clearNotificationQueue(),s&&!s.isSubscribed()&&this.props.ready&&(this.state.topic!=t.topic||!e.ready)){const e=this.props.newTopicParams&&this.props.newTopicParams._topicName==this.props.topic;let t=s.startMetaQuery().withLaterDesc();(this.state.isSharer||e&&!s.isChannel())&&(t=t.withLaterSub()),(this.state.isReader||e)&&(t=t.withLaterData(v.MESSAGES_PAGE),this.state.isReader&&(t=t.withLaterDel()),this.setState({fetchingMessages:!0}));const a=e?this.props.newTopicParams:void 0;s.subscribe(t.build(),a).then((e=>{303!=e.code?(this.state.topic!=e.topic&&this.setState({topic:e.topic}),this.props.onNewTopicCreated(this.props.topic,e.topic),s.queuedMessages((e=>{!e._sending&&s.isSubscribed()&&s.publishMessage(e)}))):E.default.navigateTo(E.default.setUrlTopic("",e.params.topic))})).catch((e=>{console.log("Failed subscription to",this.state.topic),this.props.onError(e.message,"err");const t=k.getDerivedStateFromProps({},{});t.title=this.props.intl.formatMessage(C.not_found),this.setState(t)}))}}static getDerivedStateFromProps(e,t){let s={};if(e.topic){if(e.topic!=t.topic){const a=e.tinode.getTopic(e.topic);if(s={topic:e.topic,docPreview:null,imagePreview:null,imagePostview:null,typingIndicator:!1,scrollPosition:0,fetchingMessages:!1},a){const n=[],i=[];e.connected&&a.subscribers((t=>{t.online&&t.user!=e.myUserId&&i.push(t)})),a.messages((function(e){e.deleted||n.push(e)})),Object.assign(s,{messages:n,onlineSubs:i}),a.public?Object.assign(s,{title:a.public.fn,avatar:(0,f.makeImageUrl)(a.public.photo)}):Object.assign(s,{title:"",avatar:null});const o=a.p2pPeerDesc();o?Object.assign(s,{peerMessagingDisabled:y(o.acs)}):t.peerMessagingDisabled&&Object.assign(s,{peerMessagingDisabled:!1}),Object.assign(s,{channel:a.isChannel()})}else Object.assign(s,{messages:[],onlineSubs:[],title:"",avatar:null,peerMessagingDisabled:!1,channel:!1})}}else s={messages:[],onlineSubs:[],topic:null,title:"",avatar:null,docPreview:null,imagePreview:null,imagePostview:null,typingIndicator:!1,scrollPosition:0,fetchingMessages:!1,peerMessagingDisabled:!1,channel:!1};return e.acs?(e.acs.isWriter()!=t.isWriter&&(s.isWriter=!t.isWriter),e.acs.isReader()!=t.isReader&&(s.isReader=!t.isReader),!e.acs.isReader("given")!=t.readingBlocked&&(s.readingBlocked=!t.readingBlocked),e.acs.isSharer()!=t.isSharer&&(s.isSharer=!t.isSharer)):(t.isWriter&&(s.isWriter=!1),t.isReader&&(s.isReader=!1),t.readingBlocked||(t.readingBlocked=!0),t.isSharer&&(s.isSharer=!1)),M(e.acs)==!t.unconformed&&(s.unconfirmed=!t.unconformed),!e.connected&&t.onlineSubs&&t.onlineSubs.length>0&&(s.onlineSubs=[]),s}leave(e){if(!e)return;let t=this.props.tinode.getTopic(e);t&&t.isSubscribed()&&t.leave(!1).catch((()=>{})).finally((()=>{this.setState({fetchingMessages:!1}),t.onData=void 0,t.onAllMessagesReceived=void 0,t.onInfo=void 0,t.onMetaDesc=void 0,t.onSubsUpdated=void 0,t.onPres=void 0}))}handleScrollReference(e){e&&(e.addEventListener("scroll",this.handleScrollEvent),this.messagesScroller=e,this.messagesScroller.scrollTop=this.messagesScroller.scrollHeight-this.state.scrollPosition)}handleScrollEvent(e){this.setState({scrollPosition:e.target.scrollHeight-e.target.scrollTop}),e.target.scrollTop<=0&&this.setState(((e,t)=>{const s={};if(!e.fetchingMessages){const e=this.props.tinode.getTopic(this.state.topic);e&&e.isSubscribed()&&e.msgHasMoreMessages()&&(s.fetchingMessages=!0,e.getMessagesPage(v.MESSAGES_PAGE).catch((e=>{this.setState({fetchingMessages:!1}),this.props.onError(e.message,"err")})))}return s}))}handleDescChange(e){e.public?this.setState({title:e.public.fn,avatar:(0,f.makeImageUrl)(e.public.photo)}):this.setState({title:"",avatar:null}),e.acs&&this.setState({isWriter:e.acs.isWriter(),isReader:e.acs.isReader(),readingBlocked:!e.acs.isReader("given"),unconfirmed:M(e.acs)})}postReadNotification(e){if(!this.props.applicationVisible)return;this.readNotificationTimer||(this.readNotificationTimer=setInterval((()=>{if(0==this.readNotificationQueue.length)return clearInterval(this.readNotificationTimer),void(this.readNotificationTimer=null);let e=-1;for(;this.readNotificationQueue.length>0;){const t=this.readNotificationQueue[0];if(t.topicName!=this.state.topic){this.readNotificationQueue.shift();continue}const s=new Date;if(!(t.sendAt<=s))break;this.readNotificationQueue.shift(),e=Math.max(e,t.seq)}if(e>=0){const t=this.props.tinode.getTopic(this.state.topic);t&&t.noteRead(e)}}),300));const t=new Date;this.readNotificationQueue.push({topicName:this.state.topic,seq:e,sendAt:t.setMilliseconds(t.getMilliseconds()+v.READ_DELAY)})}clearNotificationQueue(){this.readNotificationQueue=[],this.readNotificationTimer&&(clearInterval(this.readNotificationTimer),this.readNotificationTimer=null)}handleSubsUpdated(){if(this.state.topic){const e=[],t=this.props.tinode.getTopic(this.state.topic);t.subscribers((t=>{t.online&&t.user!=this.props.myUserId&&e.push(t)}));const s={onlineSubs:e},a=t.p2pPeerDesc();a?Object.assign(s,{peerMessagingDisabled:y(a.acs)}):this.state.peerMessagingDisabled&&Object.assign(s,{peerMessagingDisabled:!1}),this.setState(s)}}handleNewMessage(e){const t=this.props.tinode.getTopic(this.state.topic),s={messages:[]};if(t.messages((e=>{e.deleted||s.messages.push(e)})),e&&!e.deleted){t.isNewMessage(e.seq)&&(s.scrollPosition=0);t.msgStatus(e)>=r().MESSAGE_STATUS_SENT&&e.from!=this.props.myUserId&&this.postReadNotification(e.seq),this.props.onData(e)}this.setState(s)}handleAllMessagesReceived(e){this.setState({fetchingMessages:!1}),e>0&&this.postReadNotification(0)}handleInfoReceipt(e){switch(e.what){case"kp":clearTimeout(this.keyPressTimer);var t=this;this.keyPressTimer=setTimeout((function(){t.setState({typingIndicator:!1})}),v.KEYPRESS_DELAY+1e3),this.state.typingIndicator||this.setState({typingIndicator:!0});break;case"read":case"recv":this.forceUpdate();break;default:console.log("Other change in topic: ",e.what)}}handleImagePostview(e){this.setState({imagePostview:e})}handleClosePreview(){this.state.imagePreview&&this.state.imagePreview.url&&URL.revokeObjectURL(this.state.imagePreview.url),this.setState({imagePostview:null,imagePreview:null,docPreview:null})}handleFormResponse(e,t,s){if("pub"==e)this.props.sendMessage(S.attachJSON(S.parse(t),s));else if("url"==e){const e=new URL(s.ref),t=e.searchParams;for(let e in s.resp)s.resp.hasOwnProperty(e)&&t.set(e,s.resp[e]);["name","seq"].map((function(e){s[e]&&t.set(e,s[e])})),t.set("uid",this.props.myUserId),e.search=t,window.open(e,"_blank")}else console.log("Unknown action in form",e)}handleContextClick(e){e.preventDefault(),e.stopPropagation(),this.props.showContextMenu({topicName:this.state.topic,y:e.pageY,x:e.pageX})}handleShowContextMenuMessage(e,t){e.topicName=this.state.topic;const s=t||[],a=this.props.tinode.getTopic(e.topicName);if(a){a.isChannel()||s.push("message_delete");const e=a.getAccessMode();e&&e.isDeleter()&&s.push("message_delete_hard")}this.props.showContextMenu(e,s)}handleNewChatAcceptance(e){this.props.onNewChat(this.state.topic,e)}handleEnablePeer(e){e.preventDefault(),this.props.onChangePermissions(this.state.topic,v.DEFAULT_P2P_ACCESS_MODE,this.state.topic)}sendKeyPress(){const e=this.props.tinode.getTopic(this.state.topic);e.isSubscribed()&&e.noteKeyPress()}sendFileAttachment(e){const t=.75*this.props.tinode.getServerLimit("maxMessageSize",v.MAX_INBAND_ATTACHMENT_SIZE)-1024|0;if(e.size>t){const t=this.props.tinode.getLargeFileHelper();if(!t)return void this.props.onError(this.props.intl.formatMessage(C.cannot_initiate_upload));const s=t.upload(e),a=S.attachFile(null,{mime:e.type,filename:e.name,size:e.size,urlPromise:s});this.props.sendMessage(a,s,t)}else(0,f.fileToBase64)(e,((e,t,s)=>{this.props.sendMessage(S.attachFile(null,{mime:e,data:t,filename:s}))}),this.props.onError)}handleAttachFile(e){const t=this.props.tinode.getServerLimit("maxFileUploadSize",v.MAX_EXTERN_ATTACHMENT_SIZE);e.size>t?this.props.onError(this.props.intl.formatMessage({id:"file_attachment_too_large"},{size:(0,w.bytesToHumanSize)(e.size),limit:(0,w.bytesToHumanSize)(t)}),"err"):this.setState({docPreview:{file:e,filename:e.name,size:e.size,type:e.type}})}sendImageAttachment(e,t){const s=this.state.imagePreview.type,a=this.state.imagePreview.width,n=this.state.imagePreview.height,i=this.state.imagePreview.filename,o=.75*this.props.tinode.getServerLimit("maxMessageSize",v.MAX_INBAND_ATTACHMENT_SIZE)-1024|0;if(t.size>o){const o=this.props.tinode.getLargeFileHelper();if(!o)return void this.props.onError(this.props.intl.formatMessage(C.cannot_initiate_upload));const r=o.upload(t);(0,f.imageScaled)(t,v.IMAGE_PREVIEW_DIM,v.IMAGE_PREVIEW_DIM,-1,!1,(l=>{(0,f.blobToBase64)(l,((l,c)=>{let d=S.insertImage(null,0,{mime:s,_tempPreview:c,width:a,height:n,filename:i,size:t.size,urlPromise:r});e&&(d=S.appendLineBreak(d),d=S.append(d,S.init(e))),this.props.sendMessage(d,r,o)}))}),(e=>{this.props.onError(e,"err")}))}else(0,f.blobToBase64)(t,((s,o)=>{let r=S.insertImage(null,0,{mime:s,preview:o,width:a,height:n,filename:i,size:t.size});e&&(r=S.appendLineBreak(r),r=S.append(r,S.init(e))),this.props.sendMessage(r)}))}handleAttachImage(e){const t=this.props.tinode.getServerLimit("maxFileUploadSize",v.MAX_EXTERN_ATTACHMENT_SIZE);(0,f.imageScaled)(e,v.MAX_IMAGE_DIM,v.MAX_IMAGE_DIM,t,!1,((e,t,s,a,n)=>{this.setState({imagePreview:{url:URL.createObjectURL(e),blob:e,filename:n,width:s,height:a,size:e.size,type:t}})}),(e=>{this.props.onError(e,"err")}))}handleCancelUpload(e,t){const s=this.state.messages.find((t=>t.seq==e));s&&(s._cancelled=!0),t.cancel()}render(){const{formatMessage:e}=this.props.intl;let t;if(this.props.hideSelf)t=null;else if(this.state.topic){let s;if(this.state.imagePreview)s=n().createElement(p.default,{content:this.state.imagePreview,onClose:this.handleClosePreview,onSendMessage:this.sendImageAttachment});else if(this.state.imagePostview)s=n().createElement(p.default,{content:this.state.imagePostview,onClose:this.handleClosePreview});else if(this.state.docPreview)s=n().createElement(c.default,{content:this.state.docPreview,onClose:this.handleClosePreview,onSendMessage:this.sendFileAttachment});else{const t=this.props.tinode.getTopic(this.state.topic),a=t.isChannel(),o="grp"==t.getType()&&!a;let c=[],p=null,g=null;for(let e=0;e{e.preventDefault(),this.props.onClose()}},n().createElement("i",{className:"material-icons gray"},"close"))),n().createElement("div",{id:"image-preview-container"},n().createElement("div",{className:"flex-column narrow"},n().createElement("i",{className:"material-icons gray"},function(e){const t={default:"insert_drive_file",image:"image",text:"description",video:"theaters"};return t[e]||t[(e||"").split("/")[0]]||t.default}(this.props.content.type)),n().createElement("div",null,n().createElement("b",null,n().createElement(i.FormattedMessage,{id:"label_content_type"}))," ",this.props.content.type||"application/octet-stream"),n().createElement("div",null,n().createElement("b",null,n().createElement(i.FormattedMessage,{id:"label_size"}))," ",(0,r.bytesToHumanSize)(this.props.content.size)))),n().createElement(o.default,{noInput:!0,onSendMessage:this.handleSendDoc,onError:this.props.onError})):null}}},"./src/widgets/error-panel.jsx":function(e,t,s){s.r(t),s.d(t,{default:function(){return o}});var a=s("react"),n=s.n(a),i=s("./src/widgets/menu-cancel.jsx");class o extends n().PureComponent{constructor(e){super(e),this.state={show:!1},this.hide=this.hide.bind(this)}componentDidUpdate(e){e.level!==this.props.level&&this.setState({show:!!this.props.level})}hide(){this.setState({show:!1}),this.props.onClearError&&this.props.onClearError()}render(){const e={err:"error",warn:"warning",info:"info"}[this.props.level]||"",t="info-box "+e;return n().createElement("div",{className:t},n().createElement("div",{className:"icon"},n().createElement("i",{className:"material-icons"},e)),n().createElement("span",null,this.props.text,this.props.action?n().createElement(n().Fragment,null,n().createElement("a",{href:"#",style:{whiteSpace:"nowrap"},onClick:e=>{e.preventDefault(),this.props.action()}},this.props.actionText)):null),n().createElement("div",{className:"cancel"},n().createElement(i.default,{onCancel:this.hide})))}}},"./src/widgets/file-progress.jsx":function(e,t,s){s.r(t),s.d(t,{default:function(){return o}});var a=s("react"),n=s.n(a),i=s("react-intl");class o extends n().PureComponent{render(){return n().createElement("div",{className:"uploader"},n().createElement("div",null,n().createElement("span",{style:{width:100*this.props.progress+"%"}})),this.props.progress<.999?n().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onCancel()}},n().createElement("i",{className:"material-icons"},"close")," ",n().createElement(i.FormattedMessage,{id:"action_cancel",defaultMessage:[{type:0,value:"cancel"}]})):n().createElement(i.FormattedMessage,{id:"upload_finishing",defaultMessage:[{type:0,value:"finishing..."}]}))}}},"./src/widgets/group-manager.jsx":function(e,t,s){s.r(t);var a=s("react"),n=s.n(a),i=s("react-intl"),o=s("./src/widgets/chip-input.jsx"),r=s("./src/widgets/contact-list.jsx");const l=(0,i.defineMessages)({no_contacts:{id:"no_contacts",defaultMessage:[{type:0,value:"You have no contacts :-("}]},contacts_not_found_short:{id:"contacts_not_found_short",defaultMessage:[{type:0,value:"No contacts match '"},{type:1,value:"query"},{type:0,value:"'"}]}});class c extends n().Component{constructor(e){super(e),this.state={members:e.members,index:c.indexMembers(e.members),staticMembers:c.staticMembers(e.members,e.keepInitialMembers,e.requiredMember),contactFilter:"",noContactsMessage:e.intl.formatMessage(l.no_contacts),selectedContacts:c.selectedContacts(e.members)},this.handleContactSelected=this.handleContactSelected.bind(this),this.handleMemberRemoved=this.handleMemberRemoved.bind(this),this.handleContactFilter=this.handleContactFilter.bind(this),this.handleSubmit=this.handleSubmit.bind(this),this.handleCancel=this.handleCancel.bind(this)}static indexMembers(e){let t={};return e.map((e=>{t[e.user]={delta:0,present:!0}})),t}static staticMembers(e,t,s){let a=[];return e.map((e=>{(t||e.user==s)&&a.push(e.user)})),a}static selectedContacts(e){let t=[];return e.map((e=>{t.push(e.user)})),t}handleContactSelected(e,t){let s=this.state.index[e];if(s){if(s.present)return;s.delta+=1,s.present=!0}else s={delta:1,present:!0};let a=this.state.members.slice();a.push(this.props.contacts[t]);const n=c.selectedContacts(a),i=this.state.index;i[e]=s,this.setState({members:a,index:i,selectedContacts:n})}handleMemberRemoved(e,t){const s=this.state.index[e];if(!s||!s.present)return;s.present=!1,s.delta-=1;let a=this.state.members.slice();a.splice(t,1);const n=c.selectedContacts(a),i=this.state.index;i[e]=s,this.setState({members:a,index:i,selectedContacts:n})}handleContactFilter(e){const{formatMessage:t}=this.props.intl,s=e?t(l.contacts_not_found_short,{query:e}):t(l.no_contacts);this.setState({contactFilter:e,noContactsMessage:s})}static doContactFiltering(e,t){if(e){for(let s=0;s
¯∖_(ツ)_/¯","full_name_prompt":"Vollständiger Name, z.B. Lisa Musterfrau","email_prompt":"E-Mail, z.B. jdoe@beispiel.de","button_sign_up":"Anmelden","label_your_name":"Ihr Name","label_user_id":"ID:","button_edit":"Bearbeiten","requested_permissions":"Angefordert","granted_permissions":"Erteilt","menu_item_edit_permissions":"Berechtigungen ändern","label_other_user":"Andere","action_clear_messages":"Nachrichten leeren","clear_messages_warning":"Sind Sie sicher, dass Sie diese Unterhaltung für alle leeren wollen? Das kann nicht rückgängig gemacht werden.","action_delete_messages":"Nachrichten für alle löschen","delete_messages_warning":"Sind Sie sicher, dass Sie diese Unterhaltung für alle löschen wollen? Das kann nicht rückgängig gemacht werden.","action_leave_chat":"Unterhaltung verlassen","leave_chat_warning":"Möchten Sie diese Unterhaltung wirklich verlassen?","action_block_contact":"Kontakt blockieren","block_contact_warning":"Möchten Sie diesen Kontakt wirklich blockieren?","action_report_chat":"Unterhaltung melden","report_chat_warning":"Möchten Sie diese Unterhaltung wirklich blockieren und melden?","title_info":"Info","label_topic_name":"Name","label_private":"Privater Kommentar","private_editing_placeholder":"Nur für Sie sichtbar","label_muting_topic":"Stumm geschaltet:","action_more":"Mehr","label_your_permissions":"Ihre Berechtigungen:","label_permissions":"Berechtigungen:","label_you":"Sie:","label_default_access":"Standard Zugriffsmodus:","label_group_members":"Gruppenmitglieder:","button_add_members":"Mitglieder hinzufügen","group_has_no_members":"Keine Mitglieder","login_prompt":"Anmelden","password_prompt":"Passwort","stay_logged_in":"Angemeldet bleiben","forgot_password_link":"Passwort vergessen?","button_sign_in":"Anmelden","label_client":"Client:","label_server":"Server:","online_now":"jetzt online","last_seen_timestamp":"Zuletzt gesehen","title_not_found":"Nicht gefunden","unnamed_topic":"Unbenannt","messages_not_readable":"Neue Nachrichten können nicht gelesen werden","peers_messaging_disabled":"Gruppennachrichten sind deaktiviert","enable_peers_messaging":"Aktivieren","search_for_contacts":"Nutzen Sie die Suche um Kontakte zu finden","search_no_results":"Die Suche hatte keine Ergebnisse","tabtitle_find_user":"Suchen","tabtitle_new_group":"Neue Gruppe","tabtitle_group_by_id":"nach ID","new_password_placeholder":"Geben Sie ein neues Passwort ein","label_reset_password":"Passwort per E-Mail wiederherstellen:","credential_email_prompt":"E-Mail Adresse für Registrierung","button_reset":"Zurücksetzen","button_send_request":"Anfrage senden","label_server_to_use":"Server verwenden:","label_wire_transport":"Übertragung per Kabel:","button_update":"Aktualisieren","sidepanel_title_login":"Anmelden","sidepanel_title_register":"Konto erstellen","sidepanel_title_settings":"Einstellungen","sidepanel_title_account_settings":"Konto-Einstellungen","sidepanel_title_acc_general":"Allgemein","sidepanel_title_acc_security":"Sicherheit","sidepanel_title_acc_notifications":"Benachrichtigungen","sidepanel_title_acc_support":"Unterstützung","sidepanel_title_newtpk":"Neue Unterhaltung starten","sidepanel_title_cred":"Anmeldeinformationen bestätigen","sidepanel_title_reset":"Passwort zurücksetzen","sidepanel_title_archive":"Archivierte Unterhaltungen","sidepanel_title_blocked":"Blockierte Unterhaltungen","reconnect_countdown":"Getrennt. Wiederverbinden in {seconds}…","reconnect_now":"Jetzt probieren","push_init_failed":"Initialisierung von Push-Benachrichtigungen fehlgeschlagen","invalid_security_token":"Ungültiger Sicherheitsschlüssel","no_connection":"Keine Verbindung","code_doesnot_match":"Code stimmt nicht überein","update_available":"Aktualisierung verfügbar.","reload_update":"Neu laden","phone_dative":"Telefon","email_dative":"E-Mail","enter_confirmation_code_prompt":"Geben Sie den Bestätigungscode ein, der per {method} geschickt wurde:","numeric_confirmation_code_prompt":"Nur zahlen","button_confirm":"Bestätigen","save_attachment":"Speichern","deleted_content":"Inhalt gelöscht","invalid_content":"ungültiger Inhalt","user_not_found":"Nicht gefunden","badge_you":"Sie","badge_owner":"Besitzer","menu_item_info":"Info","menu_item_clear_messages":"Nachrichten leeren","menu_item_clear_messages_for_all":"Für alle leeren","menu_item_delete":"Löschen","menu_item_delete_for_all":"Für alle löschen","menu_item_send_retry":"Wiederholen","menu_item_mute":"Unterhaltung stumm schalten","menu_item_unmute":"Stumm schalten beenden","menu_item_delete_topic":"Entfernen","topic_delete_warning":"Möchten Sie diese Unterhaltung wirklich löschen?","menu_item_unblock":"Blockierung aufheben","menu_item_block":"Blockieren","topic_block_warning":"Möchten Sie diese Unterhaltung wirklich blockieren?","menu_item_member_delete":"Entfernen","menu_item_archive_topic":"Archivieren","action_cancel":"Abbrechen","upload_finishing":"wird abgeschlossen...","no_contacts":"Sie haben keine Kontakte :-(","contacts_not_found_short":"Keine Kontakte für \'\'{query}\'\'","title_group_members":"Gruppenmitglieder","title_all_contacts":"Alle Kontakte","button_ok":"OK","button_cancel":"Abbrechen","more_online_members":"+{overflow} mehr","download_action":"herunterladen","label_file_name":"Dateiname:","label_content_type":"Inhaltsart:","label_size":"Größe:","chat_invitation":"Sie sind eingeladen, an einem neuen Chat teilzunehmen. Was möchten Sie tun?","chat_invitation_accept":"Akzeptieren","chat_invitation_ignore":"Ignorieren","chat_invitation_block":"Blockieren","error_invalid_id":"ungültige ID","group_user_id_prompt":"Gruppe oder Benutzer ID","button_subscribe":"Abbonieren","topic_name_editing_placeholder":"Freiform Name der Gruppe","button_create":"Erstellen","permission_join":"Beitreten ({val})","permission_read":"Lesen ({val})","permission_write":"Schreiben ({val})","permission_pres":"Benachrichtigt werden ({val})","permission_admin":"Bestätigen ({val})","permission_share":"Teilen ({val})","permission_delete":"Entfernen ({val})","permission_owner":"Besitzer ({val})","title_permissions":"Berechtigungen","message_sending":"wird gesendet...","message_sending_failed":"fehlgeschlagen","search_placeholder":"Liste: email:lisa@beispiel.de, tel:17025550003...","messaging_disabled_prompt":"Nachrichtenübermittlung deaktiviert","new_message_prompt":"Neue Nachricht","image_caption_prompt":"Bildunterschrift","file_attachment_too_large":"Die Dateigröße {size} überschreitet das Limit von {limit}.","cannot_initiate_file_upload":"Datei kann nicht hochgeladen werden.","tags_not_found":"Keine Schlagworte definiert. Erstellen Sie welche.","tags_editor_no_tags":"Schlagworte hinzufügen","title_manage_tags":"Verwalten","channel_prompt":"Dies ist ein Sender","channel":"Sender"},"en":{"validate_credential_action":"confirm","title_tag_manager":"Tags (user discovery)","label_user_contacts":"Contacts:","button_add_another":"Add another","label_message_sound":"Message sound:","label_push_notifications":"Notification alerts:","label_push_notifications_disabled":"Notification alerts (requires HTTPS):","label_incognito_mode":"Incognito mode:","delete_account":"Delete account","delete_account_arning":"Are you sure you want to delete your account? It cannot be undone.","label_password":"Password","password_unchanged_prompt":"Unchanged","button_logout":"Logout","button_delete_account":"Delete account","label_default_access_mode":"Default access mode:","blocked_contacts_link":"Blocked contacts ({count})","link_contact_us":"Contact Us","link_terms_of_service":"Terms of Service","link_privacy_policy":"Privacy Policy","label_sdk":"SDK:","label_server_address":"Server address:","archived_contacts":"Archived contacts ({count})","contacts_not_found":"You have no chats
¯∖_(ツ)_/¯","full_name_prompt":"Full name, e.g. John Doe","email_prompt":"Email, e.g. jdoe@example.com","button_sign_up":"Sign up","label_your_name":"Your name","label_user_id":"ID:","button_edit":"Edit","requested_permissions":"Requested","granted_permissions":"Granted","menu_item_edit_permissions":"Edit permissions","label_other_user":"Other","action_clear_messages":"Clear Messages","clear_messages_warning":"Are you sure you want to clear all messages? It cannot be undone.","action_delete_messages":"Clear Messages for All","delete_messages_warning":"Are you sure you want to delete all messages for everyone? It cannot be undone.","action_leave_chat":"Leave Conversation","leave_chat_warning":"Are you sure you want to leave this conversation?","action_block_contact":"Block Contact","block_contact_warning":"Are you sure you want to block this contact?","action_report_chat":"Report Conversation","report_chat_warning":"Are you sure you want to block and report this conversation?","title_info":"Info","label_topic_name":"Name","label_private":"Private comment","private_editing_placeholder":"Visible to you only","label_muting_topic":"Muted:","action_more":"More","label_your_permissions":"Your permissions:","label_permissions":"Permissions:","label_you":"You:","label_default_access":"Default access mode:","label_group_members":"Group members:","button_add_members":"Add members","group_has_no_members":"No members","login_prompt":"Login","password_prompt":"Password","stay_logged_in":"Stay logged in","forgot_password_link":"Forgot password?","button_sign_in":"Sign in","label_client":"Client:","label_server":"Server:","online_now":"online now","last_seen_timestamp":"Last seen","title_not_found":"Not found","channel":"channel","unnamed_topic":"Unnamed","messages_not_readable":"no access to messages","peers_messaging_disabled":"Peer\'s messaging is disabled.","enable_peers_messaging":"Enable","search_for_contacts":"Use search to find contacts","search_no_results":"Search returned no results","tabtitle_find_user":"find","tabtitle_new_group":"new group","tabtitle_group_by_id":"by id","new_password_placeholder":"Enter new password","label_reset_password":"Send a password reset email:","credential_email_prompt":"Your registration email","button_reset":"Reset","button_send_request":"Send request","label_server_to_use":"Server to use:","label_wire_transport":"Wire transport:","button_update":"Update","sidepanel_title_login":"Sign In","sidepanel_title_register":"Create Account","sidepanel_title_settings":"Settings","sidepanel_title_account_settings":"Account Settings","sidepanel_title_acc_general":"General","sidepanel_title_acc_security":"Security","sidepanel_title_acc_notifications":"Notifications","sidepanel_title_acc_support":"Support","sidepanel_title_newtpk":"Start New Chat","sidepanel_title_cred":"Confirm Credentials","sidepanel_title_reset":"Reset Password","sidepanel_title_archive":"Archived Chats","sidepanel_title_blocked":"Blocked Chats","reconnect_countdown":"Disconnected. Reconnecting in {seconds}…","reconnect_now":"Try now","push_init_failed":"Failed to initialize push notifications","invalid_security_token":"Invalid security token","no_connection":"No connection","code_doesnot_match":"Code does not match","update_available":"Update available.","reload_update":"Reload","phone_dative":"phone","email_dative":"email","enter_confirmation_code_prompt":"Enter confirmation code sent to you by {method}:","numeric_confirmation_code_prompt":"Numbers only","button_confirm":"Confirm","save_attachment":"save","deleted_content":"content deleted","invalid_content":"invalid content","user_not_found":"Not found","badge_you":"you","badge_owner":"owner","menu_item_info":"Info","menu_item_clear_messages":"Clear messages","menu_item_clear_messages_for_all":"Clear for All","menu_item_delete":"Delete","menu_item_delete_for_all":"Delete for All","menu_item_send_retry":"Retry","menu_item_mute":"Mute","menu_item_unmute":"Unmute","menu_item_delete_topic":"Delete","topic_delete_warning":"Are you sure you want to delete this conversation?","menu_item_unblock":"Unblock","menu_item_block":"Block","topic_block_warning":"Are you sure you want to block this conversation?","menu_item_member_delete":"Remove","menu_item_archive_topic":"Archive","action_cancel":"cancel","upload_finishing":"finishing...","no_contacts":"You have no contacts :-(","contacts_not_found_short":"No contacts match \'\'{query}\'\'","title_group_members":"Group Members","title_all_contacts":"All Contacts","button_ok":"OK","button_cancel":"Cancel","more_online_members":"+{overflow} more","download_action":"download","label_file_name":"File name:","label_content_type":"Content type:","label_size":"Size:","chat_invitation":"You are invited to start a new chat. What would you like to do?","chat_invitation_accept":"Accept","chat_invitation_ignore":"Ignore","chat_invitation_block":"Block","error_invalid_id":"Invalid ID","group_user_id_prompt":"Group or User ID","button_subscribe":"Subscribe","topic_name_editing_placeholder":"Freeform name of the group","channel_prompt":"This is a channel","button_create":"Create","permission_join":"Join ({val})","permission_read":"Read ({val})","permission_write":"Write ({val})","permission_pres":"Get notified ({val})","permission_admin":"Approve ({val})","permission_share":"Share ({val})","permission_delete":"Delete ({val})","permission_owner":"Owner ({val})","title_permissions":"Permissions","message_sending":"sending...","message_sending_failed":"failed","search_placeholder":"List like email:alice@example.com, tel:17025550003...","messaging_disabled_prompt":"Messaging disabled","new_message_prompt":"New message","image_caption_prompt":"Image caption","file_attachment_too_large":"The file size {size} exceeds the {limit} limit.","cannot_initiate_file_upload":"Cannot initiate file upload.","tags_not_found":"No tags defined. Add some.","tags_editor_no_tags":"Add some tags","title_manage_tags":"Manage"},"es":{"validate_credential_action":"confirmar","title_tag_manager":"Etiquetas (descubrimiento de usuarios)","label_user_contacts":"Contactos:","button_add_another":"Añadir contacto","label_message_sound":"Sonido de mensaje:","label_push_notifications":"Alertas de notificaciones:","label_push_notifications_disabled":"Alertas de notificaciones (requiere HTTPS):","label_incognito_mode":"Modo incógnito:","delete_account":"Eliminar cuenta","delete_account_arning":"¿Estás seguro de que deseas eliminar permanentemente tu cuenta? Esta acción es irreversible.","label_password":"Contraseña","password_unchanged_prompt":"Sin cambios","button_logout":"Cerrar sesión","button_delete_account":"Eliminar cuenta","label_default_access_mode":"Modo de acceso predeterminado:","blocked_contacts_link":"Contactos bloqueados ({count})","link_contact_us":"Contáctanos","link_terms_of_service":"Términos de uso","link_privacy_policy":"Política de privacidad","label_sdk":"SDK:","label_server_address":"Dirección del servidor:","archived_contacts":"Contactos archivados ({count})","contacts_not_found":"No tienes chats
¯∖_(ツ)_/¯","full_name_prompt":"Nombre completo, p.ej. Juan González Hernández","email_prompt":"Correo electrónico, p.ej. juan@example.com","button_sign_up":"Regístrate","label_your_name":"Tu nombre","label_user_id":"ID:","button_edit":"Editar","requested_permissions":"Solicitados","granted_permissions":"Otorgados","menu_item_edit_permissions":"Editar permisos","label_other_user":"Otros","action_clear_messages":"Borrar mensajes","clear_messages_warning":"¿Estás seguro de que quieres eliminar todos los mensajes? Esta acción es irreversible.","action_delete_messages":"Borrar mensajes para todos","delete_messages_warning":"¿Estás seguro de que quieres eliminar todos los mensajes para todos? Esta acción es irreversible.","action_leave_chat":"Dejar conversación","leave_chat_warning":"¿Estás seguro de que quieres dejar esta conversación?","action_block_contact":"Bloquear contacto","block_contact_warning":"¿Estás seguro de que quieres bloquear a este contacto?","action_report_chat":"Reportar conversación","report_chat_warning":"¿Estás seguro de que quieres bloquear y reportar a esta conversación?","title_info":"Información","label_topic_name":"Nombre del tema","label_private":"Comentario privado","private_editing_placeholder":"Sólo visible para tí","label_muting_topic":"Silenciado:","action_more":"Más","label_your_permissions":"Tus permisoss:","label_permissions":"Permisos:","label_you":"Tú:","label_default_access":"Modo de acceso predeterminado:","label_group_members":"Miembros del grupo:","button_add_members":"Añadir miembros","group_has_no_members":"No hay miembros","login_prompt":"Nombre de usuario","password_prompt":"Contraseña","stay_logged_in":"Permanecer conectado","forgot_password_link":"¿Olvidaste tu contraseña?","button_sign_in":"Entrar","label_client":"Cliente:","label_server":"Servidor:","online_now":"en línea","last_seen_timestamp":"Últ. vez","title_not_found":"No encontrado","unnamed_topic":"Sin nombre","messages_not_readable":"sin acceso a mensajes","peers_messaging_disabled":"La mensajería Peer está deshabilitada.","enable_peers_messaging":"Habilitar","search_for_contacts":"Usa la búsqueda para encontrar contactos","search_no_results":"La búsqueda no arrojó resultados","tabtitle_find_user":"encontrar","tabtitle_new_group":"nuevo grupo","tabtitle_group_by_id":"por ID","new_password_placeholder":"Introduzca una nueva contraseña","label_reset_password":"Enviar un correo electrónico de restablecimiento de contraseña:","credential_email_prompt":"Tu correo electrónico de registro","button_reset":"Restablecer","button_send_request":"Enviar petición","label_server_to_use":"Servidor para usar:","label_wire_transport":"Transporte de alambre:","button_update":"Actualizar","sidepanel_title_login":"Iniciar sesión","sidepanel_title_register":"Crear cuenta","sidepanel_title_settings":"Ajustes","sidepanel_title_account_settings":"Ajustes de la cuenta","sidepanel_title_acc_general":"General","sidepanel_title_acc_security":"Seguridad","sidepanel_title_acc_notifications":"Notificaciones","sidepanel_title_acc_support":"Soporte","sidepanel_title_newtpk":"Iniciar un nuevo chat","sidepanel_title_cred":"Confirmar credenciales","sidepanel_title_reset":"Restablecer contraseña","sidepanel_title_archive":"Chats archivados","sidepanel_title_blocked":"Chats bloqueados","update_available":"Actualización disponible.","reload_update":"Recargar","reconnect_countdown":"Desconectado. Reconectando en {seconds}…","reconnect_now":"Reintentar","push_init_failed":"Error al inicializar las notificaciones push","invalid_security_token":"Token de seguridad inválido","no_connection":"Sin conexión","code_doesnot_match":"El código no coincide","phone_dative":"teléfono","email_dative":"correo electrónico","enter_confirmation_code_prompt":"Intruduzca el código de confirmación enviado a tu {method}:","numeric_confirmation_code_prompt":"Sólo números","button_confirm":"Confirmar","save_attachment":"guardar","deleted_content":"este mensaje fue eliminado","invalid_content":"contenido inválido","user_not_found":"Usuario no encontrado","badge_you":"tú","badge_owner":"propietario","menu_item_info":"Información","menu_item_clear_messages":"Borrar mensajes","menu_item_clear_messages_for_all":"Borrar para todos","menu_item_delete":"Eliminar","menu_item_delete_for_all":"Eliminar para todos","menu_item_send_retry":"Inténtalo de nuevo","menu_item_mute":"Silenciar","menu_item_unmute":"Anular el silencio","menu_item_delete_topic":"Eliminar","topic_delete_warning":"¿Estás seguro de que quieres eliminar esta conversación?","menu_item_unblock":"Desbloquear","menu_item_block":"Bloquear","topic_block_warning":"¿Estás seguro de que quieres bloquear esta conversación","menu_item_member_delete":"Eliminar","menu_item_archive_topic":"Archivar","action_cancel":"cancelar","upload_finishing":"terminando...","no_contacts":"No tienes contactos :-(","contacts_not_found_short":"Ningún contacto coincide con \'\'{query}\'\'","title_group_members":"Miembros del grupo","title_all_contacts":"Todos los contactos","button_ok":"OK","button_cancel":"Cancelar","more_online_members":"+{overflow} más","download_action":"descargar","label_file_name":"Nombre del archivo:","label_content_type":"Tipo de contenido:","label_size":"Tamaño:","chat_invitation":"Estás invitado a participar en un nuevo chat. ¿Qué te gustaría hacer?","chat_invitation_accept":"Aceptar","chat_invitation_ignore":"Ignorar","chat_invitation_block":"Bloquear","error_invalid_id":"ID inválido","group_user_id_prompt":"ID del grupo o usuario","button_subscribe":"Suscribirse","topic_name_editing_placeholder":"Nombre del grupo","button_create":"Crear","permission_join":"Unirse ({val})","permission_read":"Leer ({val})","permission_write":"Escribir ({val})","permission_pres":"Ser notificado ({val})","permission_admin":"Approbar ({val})","permission_share":"Compartir ({val})","permission_delete":"Eliminar ({val})","permission_owner":"Propietario ({val})","title_permissions":"Permisos","message_sending":"enviando...","message_sending_failed":"no se pudo enviar el mensaje","search_placeholder":"Ej. email:alice@example.com, tel:17025550003...","messaging_disabled_prompt":"El envío de mensajes está deshabilitado","new_message_prompt":"Nuevo mensaje","image_caption_prompt":"Añade un comentario","file_attachment_too_large":"El tamaño del archivo {size} excede el límite de {limit}.","cannot_initiate_file_upload":"No se pudo iniciar la carga del archivo.","tags_not_found":"No hay etiquetas definidas. Añade unas.","tags_editor_no_tags":"Añadir etiquetas","title_manage_tags":"Gestionar","channel_prompt":"Este es un canal","channel":"canal"},"ko":{"validate_credential_action":"확인","title_tag_manager":"태그(사용자검색)","label_user_contacts":"연락처: ","button_add_another":"다른항목추가","label_message_sound":"메시지소리: ","label_push_notifications":"통지경보: ","label_push_notifications_disabled":"통지경보(HTTPS필요): ","label_incognito_mode":"시크릿모드: ","delete_account":"계정삭제","delete_account_arning":"계정을삭제하시겠습니까?실행취소할수없습니다.","label_password":"비밀번호","password_unchanged_prompt":"변경되지않음","button_logout":"로그아웃","button_delete_account":"계정삭제","label_default_access_mode":"기본액세스모드: ","blocked_contacts_link":"차단된연락처({수})","link_contact_us":"문의처","link_terms_of_service":"서비스약관","link_privacy_policy":"개인정보보호정책","label_sdk":"SDK:","label_server_address":"서버주소: ","archived_contacts":"보관된연락처({수})","contacts_not_found":"채팅이없습니다
¯∖_(ツ)_/¯","full_name_prompt":"전체이름(예:홍길동)","email_prompt":"이메일(예:hong@example.com)","button_sign_up":"가입","label_your_name":"이름","label_user_id":"ID:","button_edit":"편집","requested_permissions":"요청","menu_item_edit_permissions":"편집권한","label_other_user":"기타","action_clear_messages":"메시지지우기","clear_messages_warning":"모든메시지를지우시겠습니까?실행취소할수없습니다.","action_delete_messages":"모든메시지지우기","delete_messages_warning":"모든사람의모든메시지를삭제하시겠습니까?실행취소할수없습니다.","action_leave_chat":"대화나누기","leave_chat_warning":"이대화를나가시겠습니까?","action_block_contact":"연락차단","block_contact_warning":"이연락처를차단하시겠습니까?","action_report_chat":"대화기록","report_chat_warning":"이대화를차단하고기록하시겠습니까?","title_info":"정보","label_topic_name":"이름","label_private":"개인코멘트","private_editing_placeholder":"나만볼수있습니다","label_muting_topic":"음소거: ","action_more":"더보기","label_your_permissions":"권한: ","label_permissions":"권한: ","label_you":"당신: ","label_default_access":"기본액세스모드: ","label_group_members":"그룹회원: ","button_add_members":"회원추가","group_has_no_members":"회원없음","login_prompt":"로그인","password_prompt":"비밀번호","stay_logged_in":"로그인상태유지","forgot_password_link":"비밀번호를잊으셨습니까?","button_sign_in":"로그인","label_client":"클라이언트: ","label_server":"서버: ","online_now":"현재접속중","last_seen_timestamp":"마지막으로본","title_not_found":"찾을수없음","unnamed_topic":"이름없는","peers_messaging_disabled":"동료의메시지가비활성화되었습니다.","enable_peers_messaging":"활성화","search_for_contacts":"검색을사용하여연락처찾기","search_no_results":"검색결과가없습니다","tabtitle_find_user":"찾기","tabtitle_new_group":"새그룹","tabtitle_group_by_id":"id로","new_password_placeholder":"새비밀번호입력","label_reset_password":"비밀번호재설정이메일보내기: ","credential_email_prompt":"등록이메일","button_reset":"재설정","button_send_request":"요청보내기","label_server_to_use":"사용할서버:","label_wire_transport":"와이어수송:","button_update":"업데이트","sidepanel_title_login":"로그인","sidepanel_title_register":"계정만들기","sidepanel_title_settings":"설정","sidepanel_title_account_settings":"계정설정","sidepanel_title_acc_general":"일반","sidepanel_title_acc_security":"보안","sidepanel_title_acc_notifications":"알림","sidepanel_title_acc_support":"지원","sidepanel_title_newtpk":"새채팅시작","sidepanel_title_cred":"자격증명확인","sidepanel_title_reset":"비밀번호재설정","sidepanel_title_archive":"보관된채팅","sidepanel_title_blocked":"차단된채팅","update_available":"업데이트가능.","reload_update":"재로드","reconnect_countdown":"연결이끊어졌습니다.다시연결하는중{초}…","reconnect_now":"지금시도","push_init_failed":"푸시알림을초기화하지못했습니다","invalid_security_token":"유효하지않은보안토큰","no_connection":"연결없음","code_doesnot_match":"코드가일치하지않습니다","phone_dative":"전화","email_dative":"이메일","enter_confirmation_code_prompt":"{방법}으로보낸확인코드를입력하십시오:","numeric_confirmation_code_prompt":"숫자만","button_confirm":"확인","save_attachment":"저장","invalid_content":"잘못된내용","user_not_found":"찾을수없음","badge_you":"당신","badge_owner":"소유자","menu_item_info":"정보","menu_item_clear_messages":"메시지지우기","menu_item_clear_messages_for_all":"모두지우기","menu_item_delete":"삭제","menu_item_delete_for_all":"모두삭제","menu_item_send_retry":"다시시도","menu_item_mute":"음소거","menu_item_unmute":"음소거해제","menu_item_delete_topic":"삭제","topic_delete_warning":"이대화를삭제하시겠습니까?","menu_item_unblock":"차단해제","menu_item_block":"차단","topic_block_warning":"이대화를차단하시겠습니까?","menu_item_member_delete":"제거","menu_item_archive_topic":"보관","action_cancel":"취소","upload_finishing":"마무리...","no_contacts":"연락처가없습니다 (._.)","contacts_not_found_short":"\'{문의}\'와일치하는연락처가없습니다.","title_group_members":"그룹구성원","title_all_contacts":"모든연락처","button_ok":"OK","button_cancel":"취소","more_online_members":"+{넘침}더보기","download_action":"다운로드","label_file_name":"파일이름: ","label_content_type":"컨텐츠유형: ","label_size":"크기: ","chat_invitation":"새로운대화를시작하도록초대되었습니다.무엇을하시겠습니까?","chat_invitation_accept":"수락","chat_invitation_ignore":"무시","chat_invitation_block":"차단","error_invalid_id":"잘못된ID","group_user_id_prompt":"그룹또는사용자ID","button_subscribe":"구독","topic_name_editing_placeholder":"그룹의자유형이름","button_create":"작성","permission_join":"참여({val})","permission_read":"읽기({val})","permission_write":"쓰기({val})","permission_pres":"알림받기({val})","permission_admin":"승인({val})","permission_share":"공유({val})","permission_delete":"삭제({val})","permission_owner":"소유자({val})","title_permissions":"권한","message_sending":"보내기...","message_sending_failed":"실패","search_placeholder":"email:alice@example.com,tel:17025550003...와같은목록","messaging_disabled_prompt":"메시지비활성화","new_message_prompt":"새메시지","image_caption_prompt":"이미지설명","file_attachment_too_large":"파일크기{크기}이(가){제한}제한을초과합니다.","cannot_initiate_file_upload":"파일업로드를시작할수없습니다.","tags_not_found":"태그가정의되지않았습니다.일부를추가하십시오.","tags_editor_no_tags":"일부태그추가","title_manage_tags":"관리","granted_permissions":"승낙하다","messages_not_readable":"메시지에 액세스 할 수 없습니다","deleted_content":"내용이 삭제되었습니다","channel_prompt":"이 채널입니다","channel":"채널"},"ro":{"validate_credential_action":"confirmă","title_tag_manager":"Tag-uri (user discovery)","label_user_contacts":"Contacte:","button_add_another":"Adaugă","label_message_sound":"Sunet de mesaj:","label_push_notifications":"Alerte de notificare:","label_push_notifications_disabled":"Alerte de notificare (necesită HTTPS):","label_incognito_mode":"Mod incognito:","delete_account":"Șterge contul","delete_account_arning":"Ești sigur că dorești să ștergi contul? Acesta nu va putea fi recuperat.","label_password":"Parola","password_unchanged_prompt":"Neschimbată","button_logout":"Deconectare","button_delete_account":"Șterge cont","label_default_access_mode":"Default access mode:","blocked_contacts_link":"Contact blocate ({count})","link_contact_us":"Contactează-ne","link_terms_of_service":"Termenii Serviciului","link_privacy_policy":"Politica de Confidențialitate","label_sdk":"SDK:","label_server_address":"Adresa serverului:","archived_contacts":"Contacte arhivate ({count})","contacts_not_found":"Nu ai contacte salvate
¯∖_(ツ)_/¯","full_name_prompt":"Numele tău","email_prompt":"Adresa de e-mail","button_sign_up":"Creează cont","label_your_name":"Numele tău","label_user_id":"ID:","button_edit":"Editează","requested_permissions":"Necesare","granted_permissions":"Oferite","menu_item_edit_permissions":"Editează permisiuni","label_other_user":"Altele","action_clear_messages":"Șterge mesajele","clear_messages_warning":"Ești sigur că dorești să ștergi mesajele? Acestea nu pot fi recuperate.","action_delete_messages":"Șterge toate mesajele","delete_messages_warning":"Ești sigur că dorești să șterge mesajele din toate conversațiile? Acestea nu pot fi recuperate.","action_leave_chat":"Ieși din conversație","leave_chat_warning":"Ești sigur că dorești să ieși din conersație?","action_block_contact":"Blochează contact","block_contact_warning":"Ești sigur că dorești să blochezi acest contact?","action_report_chat":"Raportează conversația","report_chat_warning":"Ești sigur că dorești să blochezi și să raportezi această conversație?","title_info":"Info","label_topic_name":"Nume","label_private":"Comentariu privat","private_editing_placeholder":"Vizibil doar ție","label_muting_topic":"Mod silențios (muted):","action_more":"Mai multe","label_your_permissions":"Permisiuniile tale:","label_permissions":"Permisiuni:","label_you":"Tu:","label_default_access":"Modul default:","label_group_members":"Membrii grupului:","button_add_members":"Adaugă persoane","group_has_no_members":"În acest grup nu se află persoane","login_prompt":"Conectează-te","password_prompt":"Parola","stay_logged_in":"Rămâi conectat","forgot_password_link":"Ți-ai uitat parola?","button_sign_in":"Conectează-te","label_client":"Client:","label_server":"Server:","online_now":"online acum","last_seen_timestamp":"Văzut ultima dată","title_not_found":"Nu a fost găsit","channel":"canal","unnamed_topic":"Nedenumit","messages_not_readable":"Mesajele nu pot fi citite","peers_messaging_disabled":"Mesageria de tip Peer este dezactivată.","enable_peers_messaging":"Activează","search_for_contacts":"Caută în contacte","search_no_results":"Nu s-au găsit rezultate","tabtitle_find_user":"caută","tabtitle_new_group":"grup nou","tabtitle_group_by_id":"după id","new_password_placeholder":"Introdu parolă","label_reset_password":"Resetează parola:","credential_email_prompt":"Adresa de e-mail","button_reset":"Resetează","button_send_request":"Trimite cerere","label_server_to_use":"Server de utilizat:","label_wire_transport":"Transportul legat:","button_update":"Actualizează","sidepanel_title_login":"Conectează-te","sidepanel_title_register":"Creează Cont","sidepanel_title_settings":"Setări","sidepanel_title_account_settings":"Setările Contului","sidepanel_title_acc_general":"Generale","sidepanel_title_acc_security":"Securitate","sidepanel_title_acc_notifications":"Notificări","sidepanel_title_acc_support":"Ajutor","sidepanel_title_newtpk":"Creeză un nou Chat","sidepanel_title_cred":"Confirmă credențiale","sidepanel_title_reset":"Resetează Parola","sidepanel_title_archive":"Conversații Arhivate","sidepanel_title_blocked":"Conversații Blocate","reconnect_countdown":"Deconectat. Se încearcă conectarea în {seconds}…","reconnect_now":"Încearcă din nou","push_init_failed":"Nu s-a reușit inițializarea tip push notifications","invalid_security_token":"Codul de securitate este invalid","no_connection":"Nu există conexiune","code_doesnot_match":"Codul furnizat nu este valid","update_available":"Actualizare disponibilă.","reload_update":"Reîncarcă","phone_dative":"telefon","email_dative":"email","enter_confirmation_code_prompt":"Introu codul de confirmare trimis pe {method}:","numeric_confirmation_code_prompt":"Doar cifre","button_confirm":"Confirmă","save_attachment":"salvează","deleted_content":"conținut șters","invalid_content":"conținut invalid","user_not_found":"Utilizatorul nu a fost găsit","badge_you":"tu","badge_owner":"owner","menu_item_info":"Info","menu_item_clear_messages":"Șterge mesajele","menu_item_clear_messages_for_all":"Ștergele pe toate","menu_item_delete":"Șterge","menu_item_delete_for_all":"Ștergele pe toate","menu_item_send_retry":"Reîncearcă","menu_item_mute":"Mute","menu_item_unmute":"Unmute","menu_item_delete_topic":"Șterge","topic_delete_warning":"Ești sigur că dorești să șterge această conversație?","menu_item_unblock":"Deblochează","menu_item_block":"Blochează","topic_block_warning":"Ești sigur că dorești să blochezi această conversație?","menu_item_member_delete":"Șterge persoană","menu_item_archive_topic":"Arhivează","action_cancel":"anulează","upload_finishing":"se încarcă...","no_contacts":"Nu ai contacte adăugate :-(","contacts_not_found_short":"Niciun contact găsit după criteriile \'\'{query}\'\'","title_group_members":"Persoanele din grup","title_all_contacts":"Toate Contactele","button_ok":"OK","button_cancel":"Anulează","more_online_members":"+{overflow} mai mult","download_action":"download","label_file_name":"Nume fișier:","label_content_type":"Tip conținut:","label_size":"Size:","chat_invitation":"Ai primit invitație într-o conversație. Accepți?","chat_invitation_accept":"Da, accept","chat_invitation_ignore":"Ignoră","chat_invitation_block":"Blochează","error_invalid_id":"ID Invalid","group_user_id_prompt":"Grup sau user ID","button_subscribe":"Subscribe","topic_name_editing_placeholder":"Numele grupului","channel_prompt":"Acesta este un canal","button_create":"Creează","permission_join":"Participare ({val})","permission_read":"Citire ({val})","permission_write":"Scriere ({val})","permission_pres":"Notificare ({val})","permission_admin":"Aprobare ({val})","permission_share":"Distribuire ({val})","permission_delete":"Ștergere ({val})","permission_owner":"Deținător ({val})","title_permissions":"Permisiuni","message_sending":"se trimite...","message_sending_failed":"eroare","search_placeholder":"Caută după e-mail sau număr telefon...","messaging_disabled_prompt":"Mesageria este dezactivată","new_message_prompt":"Mesaj nou","image_caption_prompt":"Titlul imaginii","file_attachment_too_large":"Dimensiunea fișiterului {size} depășește limita de {limit}.","cannot_initiate_file_upload":"Nu se poate face încărcarea.","tags_not_found":"Niciun tag definit. Adaugă.","tags_editor_no_tags":"Adaugă tag-uri","title_manage_tags":"Administrează"},"ru":{"contacts_not_found":"Чатов нет
¯∖_(ツ)_/¯","full_name_prompt":"Полное имя, напр. Иван Петров","email_prompt":"Email, напр. ivan@example.com","button_sign_up":"Создать аккаунт","label_your_name":"Ваше имя","label_password":"Пароль","password_unchanged_prompt":"Не изменен","label_user_id":"ID:","label_default_access_mode":"Доступ по умолчанию:","label_message_sound":"Звук нового сообщения:","label_push_notifications":"Уведомления:","label_push_notifications_disabled":"Уведомления (требуют HTTPS):","title_tag_manager":"Теги для поиска","button_logout":"Выйти","login_prompt":"Логин","password_prompt":"Пароль","stay_logged_in":"Запомнить","forgot_password_link":"Напомнить пароль","button_sign_in":"Войти","label_client":"Клиент:","label_server":"Сервер:","online_now":"онлайн","last_seen_timestamp":"Был активен","title_not_found":"Не найден","unnamed_topic":"Без названия","messages_not_readable":"нет доступа к сообщениям","tabtitle_find_user":"найти","tabtitle_new_group":"создать","tabtitle_group_by_id":"по id","label_server_to_use":"Использовать сервер:","label_wire_transport":"Соединение:","button_update":"Применить","sidepanel_title_login":"Авторизация","sidepanel_title_register":"Зарегистрироваться","sidepanel_title_settings":"Настройки","sidepanel_title_account_settings":"Настройки аккаунта","sidepanel_title_newtpk":"Новый чат","sidepanel_title_cred":"Подтвердить","sidepanel_title_reset":"Сменить пароль","tags_not_found":"Тегов нет. Добавьте","tags_editor_no_tags":"Добавьте теги","title_manage_tags":"Редактировать","message_sending":"в пути...","message_sending_failed":"ошибка","search_placeholder":"Список, напр. email:alice@example.com, tel:+17025550003...","messaging_disabled_prompt":"Отправка недоступна","new_message_prompt":"Новое сообщение","file_attachment_too_large":"Размер файла {size} превышает {limit} лимит.","cannot_initiate_file_upload":"Ошибка загрузки файла.","search_for_contacts":"Поиск контактов","enter_confirmation_code_prompt":"Код подтверждения, полученный по {method}:","numeric_confirmation_code_prompt":"Только цифры","button_confirm":"Подтвердить","button_ok":"OK","button_cancel":"Отменить","invalid_content":"сообщение не читается","label_file_name":"Имя файла:","label_content_type":"Тип:","label_size":"Размер:","phone_dative":"телефону","email_dative":"емейлу","title_group_members":"Участники","download_action":"скачать","permission_join":"Подписываться ({val})","permission_read":"Читать ({val})","permission_write":"Писать ({val})","permission_pres":"Уведомлять ({val})","permission_admin":"Подтверждать ({val})","permission_share":"Приглашать ({val})","permission_delete":"Удалять ({val})","permission_owner":"Владелец ({val})","title_permissions":"Права доступа","requested_permissions":"Требуются","granted_permissions":"Получены","menu_item_edit_permissions":"Права доступа","label_other_user":"Второй","label_topic_name":"Название","label_private":"Комментарий","private_editing_placeholder":"Виден только вам","label_muting_topic":"Без уведомлений","action_more":"Ещё","label_your_permissions":"Ваши права доступа:","label_permissions":"Права доступа:","label_you":"Вы:","label_default_access":"Права по умолчанию:","label_group_members":"Участники чата:","button_add_members":"Добавить","group_has_no_members":"Нет участников","action_leave_chat":"Уйти из чата","menu_item_info":"Информация","menu_item_clear_messages":"Удалить сообщения","menu_item_clear_messages_for_all":"Удалить для всех","menu_item_delete":"Удалить","menu_item_delete_for_all":"Удалить для всех","menu_item_send_retry":"Отправить заново","menu_item_mute":"Не уведомлять","menu_item_unmute":"Уведомлять","menu_item_delete_topic":"Удалить чат","menu_item_unblock":"Разблокировать","menu_item_block":"Заблокировать","menu_item_member_delete":"Отписать","title_info":"Подробности","new_password_placeholder":"Введите новый пароль","label_reset_password":"Отправить емейл для смены пароля:","credential_email_prompt":"Регистрационный емейл","button_reset":"Изменить","button_send_request":"Отправить","action_cancel":"отменить","upload_finishing":"завершение...","no_contacts":"Ничего нет :-(","contacts_not_found_short":"Нет контактов для запроса \'\'{query}\'\'","title_all_contacts":"Все контакты","error_invalid_id":"Неверный ID","group_user_id_prompt":"ID чата или пользователя","button_subscribe":"Подписаться","topic_name_editing_placeholder":"Название чата","button_create":"Создать","badge_you":"вы","badge_owner":"влад.","update_available":"Есть новая версия приложения.","reload_update":"Обновить","user_not_found":"Не найден","reconnect_countdown":"Нет связи. Подключение через {seconds}…","reconnect_now":"Подключить сейчас.","save_attachment":"сохранить","menu_item_archive_topic":"В архив","archived_contacts":"Чаты в архиве ({count})","sidepanel_title_archive":"Архив чатов","chat_invitation":"Вас пригласили начать новый чат. Как вы хотите поступить?","chat_invitation_accept":"Принять","chat_invitation_ignore":"Игнорировать","chat_invitation_block":"Заблокировать","peers_messaging_disabled":"Чат заблокирован у корреспондента.","enable_peers_messaging":"Разблокировать.","more_online_members":"+еще {overflow}","label_user_contacts":"Конакты:","validate_credential_action":"подтвердить","link_contact_us":"Связаться с нами","link_terms_of_service":"Условия сервиса","link_privacy_policy":"Политика конфиденциальности","action_delete_messages":"Удалить сообщения","action_block_contact":"Заблокировать контакт","action_report_chat":"Сообщить о нарушении","delete_messages_warning":"Вы действительно хотите удалить все сообщения?","leave_chat_warning":"Вы действительно хотите покинуть этот чат?","block_contact_warning":"Вы действительно заблокировать этот контакт?","report_chat_warning":"Вы действительно хотите сообщить о нарушении и заблокировать этот чат?","action_clear_messages":"Удалить сообщения","clear_messages_warning":"Вы действительно хотите удалить все сообщения в чате? Их будет невозможно восстановить.","topic_delete_warning":"Вы действительно хотите удалить этот чат?","topic_block_warning":"Вы действительно хотите заблокировать этот чат?","search_no_results":"Ничего не найдено","deleted_content":"удалено","image_caption_prompt":"Подпись к фото","label_incognito_mode":"Режим инкогнито:","delete_account":"Удалить аккаунт","delete_account_arning":"Вы уверены, что ходите удалить свой аккаунт? Его невозможно будет восстановить.","button_delete_account":"Удалить аккаунт","sidepanel_title_acc_security":"Безопасность","sidepanel_title_acc_notifications":"Уведомления","sidepanel_title_acc_support":"Поддержка","label_sdk":"SDK:","label_server_address":"Адрес сервера:","button_edit":"Редактировать","button_add_another":"Добавить","sidepanel_title_acc_general":"Общие настройки","blocked_contacts_link":"Заблокированные ({count})","sidepanel_title_blocked":"Заблокированные чаты","push_init_failed":"Ошибка инициализации пуш уведомлений","invalid_security_token":"Токен некорректен","no_connection":"Нет связи","code_doesnot_match":"Код не совпадает","channel_prompt":"Создать канал","channel":"канал"},"zh":{"archived_contacts":"已归档联系人 ({count})","contacts_not_found":"你尚无会话
¯∖_(ツ)_/¯","full_name_prompt":"全名,例如张伟","email_prompt":"电子邮件,例如 zhang@example.com","button_sign_up":"注册","label_your_name":"你的姓名","label_password":"密码","password_unchanged_prompt":"未改变","label_user_id":"地址:","label_default_access_mode":"蓦然访问模式:","label_message_sound":"消息提示音:","label_push_notifications":"通知提醒:","label_push_notifications_disabled":"通知提醒(需要 HTTPS):","title_tag_manager":"标签(用户发现)","button_logout":"登出","requested_permissions":"已请求","granted_permissions":"已授予","menu_item_edit_permissions":"编辑权限","label_other_user":"其他","title_info":"信息","label_topic_name":"名称","label_private":"私人评论","private_editing_placeholder":"仅自己可见","label_muting_topic":"已静音:","action_more":"更多","label_your_permissions":"你的权限:","label_permissions":"权限:","label_you":"你:","label_default_access":"默认权限模式:","label_group_members":"群组成员:","button_add_members":"添加成员","group_has_no_members":"无成员","action_leave_chat":"离开","login_prompt":"登录","password_prompt":"密码","stay_logged_in":"保持登录","forgot_password_link":"忘记密码?","button_sign_in":"登录","label_client":"客户端:","label_server":"服务器:","online_now":"在线","last_seen_timestamp":"最后可见","title_not_found":"无法找到","unnamed_topic":"未命名","messages_not_readable":"无消息访问权限","peers_messaging_disabled":"成员间消息已禁用。","enable_peers_messaging":"启用","tabtitle_find_user":"搜索","tabtitle_new_group":"新群组","tabtitle_group_by_id":"通过 id","search_for_contacts":"使用搜索寻找联系人","new_password_placeholder":"输入新密码","label_reset_password":"发送密码重置邮件:","credential_email_prompt":"你的注册邮箱","button_reset":"重置","button_send_request":"发送请求","label_server_to_use":"使用的服务器:","label_wire_transport":"线路传输:","button_update":"更新","sidepanel_title_login":"登录","sidepanel_title_register":"创建账户","sidepanel_title_settings":"设置","sidepanel_title_account_settings":"帐号设定","sidepanel_title_newtpk":"开始新会话","sidepanel_title_cred":"确认凭据","sidepanel_title_reset":"重置密码","sidepanel_title_archive":"已存档会话","update_available":"更新可用。","reload_update":"重新载入","reconnect_countdown":"连接已断开。{seconds} 秒后重新连接…","reconnect_now":"立即尝试","phone_dative":"电话","email_dative":"电子邮件","enter_confirmation_code_prompt":"输入通过{method}发送的验证码:","numeric_confirmation_code_prompt":"仅数字","button_confirm":"确认","save_attachment":"保存","invalid_content":"无效内容","user_not_found":"未找到","badge_you":"你","badge_owner":"所有者","menu_item_info":"信息","menu_item_clear_messages":"清空消息","menu_item_clear_messages_for_all":"全部清除","menu_item_delete":"删除","menu_item_delete_for_all":"全部删除","menu_item_mute":"静音","menu_item_unmute":"取消静音","menu_item_delete_topic":"删除","menu_item_unblock":"取消屏蔽","menu_item_block":"屏蔽","menu_item_member_delete":"移除","menu_item_archive_topic":"归档","action_cancel":"取消","upload_finishing":"正在结束...","no_contacts":"你尚无联系人 (._.)","contacts_not_found_short":"无联系人匹配\'\'{query}\'\'","title_group_members":"群组成员","title_all_contacts":"全部联系人","button_ok":"好","button_cancel":"取消","download_action":"下载","label_file_name":"文件名:","label_content_type":"内容类型:","label_size":"大小:","chat_invitation":"你受邀开始新会话。你想怎么做?","chat_invitation_accept":"接受","chat_invitation_ignore":"忽略","chat_invitation_block":"屏蔽","error_invalid_id":"无效 ID","group_user_id_prompt":"群组或用户 ID","button_subscribe":"订阅","topic_name_editing_placeholder":"群组自由格式名称","button_create":"创建","permission_join":"加入 ({val})","permission_read":"读取 ({val})","permission_write":"写入 ({val})","permission_pres":"获取通知 ({val})","permission_admin":"批准 ({val})","permission_share":"分享 ({val})","permission_delete":"删除 ({val})","permission_owner":"所有者 ({val})","title_permissions":"权限","message_sending":"正在发送...","message_sending_failed":"发送失败","search_placeholder":"列表如 email:alice@example.com, tel:+17025550003...","messaging_disabled_prompt":"消息已禁用","new_message_prompt":"新消息","file_attachment_too_large":"文件大小 {size} 超过 {limit} 限制。","cannot_initiate_file_upload":"无法初始化文件上传。","tags_not_found":"尚未定义标签。添加一些。","tags_editor_no_tags":"添加一些标签","title_manage_tags":"管理标签","more_online_members":"还有{overflow}个","label_user_contacts":"往来:","validate_credential_action":"确认","link_contact_us":"联系我们","link_terms_of_service":"条款和条件","link_privacy_policy":"隐私政策","action_delete_messages":"删除所有帖子","action_block_contact":"屏蔽联系人","delete_messages_warning":"您确定要删除所有消息吗?无法撤消。","leave_chat_warning":"您确定要退出此对话吗?","block_contact_warning":"您确定要阻止此联系人吗?","action_report_chat":"检举垃圾邮件","report_chat_warning":"您确定要停止并报告此对话吗?","action_clear_messages":"删除讯息","clear_messages_warning":"您确定要清除所有消息吗?无法撤消。","topic_delete_warning":"您确定要删除此对话吗?","topic_block_warning":"您确定要阻止此对话吗?","search_no_results":"搜索返回任何结果","deleted_content":"内容已删除","image_caption_prompt":"图片标题","menu_item_send_retry":"重试","label_incognito_mode":"无痕模式:","delete_account":"删除帐户","delete_account_arning":"您确定要删除您的帐户吗?无法撤消。","button_delete_account":"删除帐户","sidepanel_title_acc_security":"安全","sidepanel_title_acc_notifications":"通知","sidepanel_title_acc_support":"支持","label_sdk":"开发包:","label_server_address":"服务器地址:","button_edit":"编辑","button_add_another":"加上另一个","sidepanel_title_acc_general":"常用设定","blocked_contacts_link":"封锁的联络人 ({count})","sidepanel_title_blocked":"被阻止的聊天","push_init_failed":"初始化推送通知失败","invalid_security_token":"无效的安全令牌","no_connection":"无连接","code_doesnot_match":"代码不匹配","channel_prompt":"这是一个频道","channel":"频道"}}')},react:function(e){e.exports=React},"react-dom":function(e){e.exports=ReactDOM},"react-intl":function(e){e.exports=ReactIntl},"tinode-sdk":function(e){e.exports=Tinode},"firebase/app":function(e){e.exports=firebase},"firebase/messaging":function(e){e.exports=firebase.messaging}},t={};function s(a){if(t[a])return t[a].exports;var n=t[a]={exports:{}};return e[a](n,n.exports,s),n.exports}s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,{a:t}),t},s.d=function(e,t){for(var a in t)s.o(t,a)&&!s.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s("./src/index.js")}();
+/******/ (function() { // webpackBootstrap
+/******/ "use strict";
+/******/ var __webpack_modules__ = ({
+
+/***/ "./src/config.js":
+/*!***********************!*\
+ !*** ./src/config.js ***!
+ \***********************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "APP_NAME": function() { return /* binding */ APP_NAME; },
+/* harmony export */ "API_KEY": function() { return /* binding */ API_KEY; },
+/* harmony export */ "KNOWN_HOSTS": function() { return /* binding */ KNOWN_HOSTS; },
+/* harmony export */ "DEFAULT_HOST": function() { return /* binding */ DEFAULT_HOST; },
+/* harmony export */ "LOGGING_ENABLED": function() { return /* binding */ LOGGING_ENABLED; },
+/* harmony export */ "KEYPRESS_DELAY": function() { return /* binding */ KEYPRESS_DELAY; },
+/* harmony export */ "RECEIVED_DELAY": function() { return /* binding */ RECEIVED_DELAY; },
+/* harmony export */ "READ_DELAY": function() { return /* binding */ READ_DELAY; },
+/* harmony export */ "MIN_TAG_LENGTH": function() { return /* binding */ MIN_TAG_LENGTH; },
+/* harmony export */ "MAX_TAG_LENGTH": function() { return /* binding */ MAX_TAG_LENGTH; },
+/* harmony export */ "MAX_TAG_COUNT": function() { return /* binding */ MAX_TAG_COUNT; },
+/* harmony export */ "DEFAULT_P2P_ACCESS_MODE": function() { return /* binding */ DEFAULT_P2P_ACCESS_MODE; },
+/* harmony export */ "NEW_GRP_ACCESS_MODE": function() { return /* binding */ NEW_GRP_ACCESS_MODE; },
+/* harmony export */ "CHANNEL_ACCESS_MODE": function() { return /* binding */ CHANNEL_ACCESS_MODE; },
+/* harmony export */ "NO_ACCESS_MODE": function() { return /* binding */ NO_ACCESS_MODE; },
+/* harmony export */ "MEDIA_BREAKPOINT": function() { return /* binding */ MEDIA_BREAKPOINT; },
+/* harmony export */ "REM_SIZE": function() { return /* binding */ REM_SIZE; },
+/* harmony export */ "AVATAR_SIZE": function() { return /* binding */ AVATAR_SIZE; },
+/* harmony export */ "BROKEN_IMAGE_SIZE": function() { return /* binding */ BROKEN_IMAGE_SIZE; },
+/* harmony export */ "MESSAGES_PAGE": function() { return /* binding */ MESSAGES_PAGE; },
+/* harmony export */ "MAX_INBAND_ATTACHMENT_SIZE": function() { return /* binding */ MAX_INBAND_ATTACHMENT_SIZE; },
+/* harmony export */ "MAX_EXTERN_ATTACHMENT_SIZE": function() { return /* binding */ MAX_EXTERN_ATTACHMENT_SIZE; },
+/* harmony export */ "MAX_IMAGE_DIM": function() { return /* binding */ MAX_IMAGE_DIM; },
+/* harmony export */ "IMAGE_PREVIEW_DIM": function() { return /* binding */ IMAGE_PREVIEW_DIM; },
+/* harmony export */ "MAX_ONLINE_IN_TOPIC": function() { return /* binding */ MAX_ONLINE_IN_TOPIC; },
+/* harmony export */ "MAX_TITLE_LENGTH": function() { return /* binding */ MAX_TITLE_LENGTH; },
+/* harmony export */ "LINK_CONTACT_US": function() { return /* binding */ LINK_CONTACT_US; },
+/* harmony export */ "LINK_PRIVACY_POLICY": function() { return /* binding */ LINK_PRIVACY_POLICY; },
+/* harmony export */ "LINK_TERMS_OF_SERVICE": function() { return /* binding */ LINK_TERMS_OF_SERVICE; }
+/* harmony export */ });
+/* harmony import */ var _version_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./version.js */ "./src/version.js");
+
+const APP_NAME = 'TinodeWeb/' + (_version_js__WEBPACK_IMPORTED_MODULE_0__.PACKAGE_VERSION || '0.16');
+const API_KEY = 'AQEAAAABAAD_rAp4DJh05a1HAwFT3A6K';
+const KNOWN_HOSTS = {
+ hosted: 'web.tinode.co',
+ local: 'localhost:6060'
+};
+const DEFAULT_HOST = KNOWN_HOSTS.hosted;
+const LOGGING_ENABLED = true;
+const KEYPRESS_DELAY = 3 * 1000;
+const RECEIVED_DELAY = 500;
+const READ_DELAY = 1000;
+const MIN_TAG_LENGTH = 2;
+const MAX_TAG_LENGTH = 96;
+const MAX_TAG_COUNT = 16;
+const DEFAULT_P2P_ACCESS_MODE = 'JRWPS';
+const NEW_GRP_ACCESS_MODE = 'JRWPSAO';
+const CHANNEL_ACCESS_MODE = 'JR';
+const NO_ACCESS_MODE = 'N';
+const MEDIA_BREAKPOINT = 640;
+const REM_SIZE = 13;
+const AVATAR_SIZE = 128;
+const BROKEN_IMAGE_SIZE = 32;
+const MESSAGES_PAGE = 24;
+const MAX_INBAND_ATTACHMENT_SIZE = 262144;
+const MAX_EXTERN_ATTACHMENT_SIZE = 1 << 23;
+const MAX_IMAGE_DIM = 1024;
+const IMAGE_PREVIEW_DIM = 64;
+const MAX_ONLINE_IN_TOPIC = 4;
+const MAX_TITLE_LENGTH = 60;
+const LINK_CONTACT_US = 'email:info@tinode.co';
+const LINK_PRIVACY_POLICY = 'https://tinode.co/privacy.html';
+const LINK_TERMS_OF_SERVICE = 'https://tinode.co/terms.html';
+
+/***/ }),
+
+/***/ "./src/index.js":
+/*!**********************!*\
+ !*** ./src/index.js ***!
+ \**********************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "react-dom");
+/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _messages_json__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./messages.json */ "./src/messages.json");
+/* harmony import */ var _views_tinode_web_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./views/tinode-web.jsx */ "./src/views/tinode-web.jsx");
+/* harmony import */ var _lib_navigation_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/navigation.js */ "./src/lib/navigation.js");
+
+
+
+
+
+
+const {
+ params
+} = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_5__.default.parseUrlHash(window.location.hash);
+const language = params && params.hl || navigator.languages && navigator.languages[0] || navigator.language || navigator.userLanguage || 'en';
+const baseLanguage = language.toLowerCase().split(/[-_]/)[0];
+const messages = _messages_json__WEBPACK_IMPORTED_MODULE_3__[language] || _messages_json__WEBPACK_IMPORTED_MODULE_3__[baseLanguage] || _messages_json__WEBPACK_IMPORTED_MODULE_3__.en;
+react_dom__WEBPACK_IMPORTED_MODULE_1___default().render(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__.IntlProvider, {
+ locale: language,
+ messages: messages,
+ textComponent: (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment)
+}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_views_tinode_web_jsx__WEBPACK_IMPORTED_MODULE_4__.default, null)), document.getElementById('mountPoint'));
+
+/***/ }),
+
+/***/ "./src/lib/blob-helpers.js":
+/*!*********************************!*\
+ !*** ./src/lib/blob-helpers.js ***!
+ \*********************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "SUPPORTED_IMAGE_FORMATS": function() { return /* binding */ SUPPORTED_IMAGE_FORMATS; },
+/* harmony export */ "MIME_EXTENSIONS": function() { return /* binding */ MIME_EXTENSIONS; },
+/* harmony export */ "makeImageUrl": function() { return /* binding */ makeImageUrl; },
+/* harmony export */ "fitImageSize": function() { return /* binding */ fitImageSize; },
+/* harmony export */ "fileNameForMime": function() { return /* binding */ fileNameForMime; },
+/* harmony export */ "imageScaled": function() { return /* binding */ imageScaled; },
+/* harmony export */ "fileToBase64": function() { return /* binding */ fileToBase64; },
+/* harmony export */ "blobToBase64": function() { return /* binding */ blobToBase64; },
+/* harmony export */ "filePasted": function() { return /* binding */ filePasted; },
+/* harmony export */ "getMimeType": function() { return /* binding */ getMimeType; },
+/* harmony export */ "base64EncodedLen": function() { return /* binding */ base64EncodedLen; },
+/* harmony export */ "base64DecodedLen": function() { return /* binding */ base64DecodedLen; },
+/* harmony export */ "base64ReEncode": function() { return /* binding */ base64ReEncode; }
+/* harmony export */ });
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var _strformat_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./strformat.js */ "./src/lib/strformat.js");
+
+
+const SUPPORTED_IMAGE_FORMATS = ['image/jpeg', 'image/gif', 'image/png', 'image/svg', 'image/svg+xml'];
+const MIME_EXTENSIONS = ['jpg', 'gif', 'png', 'svg', 'svg'];
+function makeImageUrl(photo) {
+ return photo && photo.type && photo.data ? 'data:image/' + photo.type + ';base64,' + photo.data : null;
+}
+function fitImageSize(width, height, maxWidth, maxHeight, forceSquare) {
+ width = width | 0;
+ height = height | 0;
+ maxWidth = maxWidth | 0;
+ maxHeight = maxHeight | 0;
+
+ if (width <= 0 || height <= 0 || maxWidth <= 0 || maxHeight <= 0) {
+ return null;
+ }
+
+ if (forceSquare) {
+ maxWidth = maxHeight = Math.min(maxWidth, maxHeight);
+ }
+
+ let scale = Math.min(Math.min(width, maxWidth) / width, Math.min(height, maxHeight) / height);
+ let size = {
+ dstWidth: width * scale | 0,
+ dstHeight: height * scale | 0
+ };
+
+ if (forceSquare) {
+ size.dstWidth = size.dstHeight = Math.min(size.dstWidth, size.dstHeight);
+ size.srcWidth = size.srcHeight = Math.min(width, height);
+ size.xoffset = (width - size.srcWidth) / 2 | 0;
+ size.yoffset = (height - size.srcWidth) / 2 | 0;
+ } else {
+ size.xoffset = size.yoffset = 0;
+ size.srcWidth = width;
+ size.srcHeight = height;
+ }
+
+ return size;
+}
+function fileNameForMime(fname, mime) {
+ const idx = SUPPORTED_IMAGE_FORMATS.indexOf(mime);
+
+ if (idx < 0 || !fname) {
+ return fname;
+ }
+
+ const ext = MIME_EXTENSIONS[idx];
+ const at = fname.lastIndexOf('.');
+
+ if (at >= 0) {
+ fname = fname.substring(0, at);
+ }
+
+ return fname + '.' + ext;
+}
+function imageScaled(fileOrBlob, maxWidth, maxHeight, maxSize, forceSquare, onSuccess, onError) {
+ const img = new Image();
+ img.crossOrigin = 'Anonymous';
+
+ img.onerror = function (err) {
+ onError("Image format unrecognized");
+ };
+
+ img.onload = async function () {
+ URL.revokeObjectURL(img.src);
+ const dim = fitImageSize(this.width, this.height, maxWidth, maxHeight, forceSquare);
+
+ if (!dim) {
+ onError("Invalid image");
+ return;
+ }
+
+ let canvas = document.createElement('canvas');
+ canvas.width = dim.dstWidth;
+ canvas.height = dim.dstHeight;
+ let ctx = canvas.getContext('2d');
+ ctx.imageSmoothingEnabled = true;
+ ctx.drawImage(this, dim.xoffset, dim.yoffset, dim.srcWidth, dim.srcHeight, 0, 0, dim.dstWidth, dim.dstHeight);
+ const mime = SUPPORTED_IMAGE_FORMATS.indexOf(fileOrBlob.type) < 0 ? 'image/jpeg' : fileOrBlob.type;
+ let blob = await new Promise(resolve => canvas.toBlob(resolve, mime));
+
+ if (!blob) {
+ onError("Unsupported image format");
+ return;
+ }
+
+ while (maxSize > 0 && blob.length > maxSize) {
+ dim.dstWidth = dim.dstWidth * 0.70710678118 | 0;
+ dim.dstHeight = dim.dstHeight * 0.70710678118 | 0;
+ canvas.width = dim.dstWidth;
+ canvas.height = dim.dstHeight;
+ ctx = canvas.getContext('2d');
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ ctx.drawImage(this, dim.xoffset, dim.yoffset, dim.srcWidth, dim.srcHeight, 0, 0, dim.dstWidth, dim.dstHeight);
+ blob = await new Promise(resolve => canvas.toBlob(resolve, mime));
+ }
+
+ canvas = null;
+ onSuccess(blob, mime, dim.dstWidth, dim.dstHeight, fileNameForMime(fileOrBlob.name, mime));
+ };
+
+ img.src = URL.createObjectURL(fileOrBlob);
+}
+function fileToBase64(file, onSuccess) {
+ const reader = new FileReader();
+ reader.addEventListener('load', function () {
+ onSuccess(file.type, reader.result.split(',')[1], file.name);
+ });
+ reader.readAsDataURL(file);
+}
+function blobToBase64(blob, onSuccess) {
+ const reader = new FileReader();
+ reader.addEventListener('load', function () {
+ onSuccess(blob.type, reader.result.split(',')[1]);
+ });
+ reader.readAsDataURL(blob);
+}
+function filePasted(event, onImageSuccess, onAttachmentSuccess, onError) {
+ var items = (event.clipboardData || event.originalEvent.clipboardData || {}).items;
+
+ for (var i in items) {
+ var item = items[i];
+
+ if (item.kind === 'file') {
+ var file = item.getAsFile();
+
+ if (!file) {
+ console.log("Failed to get file object from pasted file item", item.kind, item.type);
+ continue;
+ }
+
+ if (file.type && file.type.split('/')[0] == 'image') {
+ if (file.size > _config_js__WEBPACK_IMPORTED_MODULE_0__.MAX_INBAND_ATTACHMENT_SIZE || SUPPORTED_IMAGE_FORMATS.indexOf(file.type) < 0) {
+ imageFileScaledToBase64(file, _config_js__WEBPACK_IMPORTED_MODULE_0__.MAX_IMAGE_DIM, _config_js__WEBPACK_IMPORTED_MODULE_0__.MAX_IMAGE_DIM, false, onImageSuccess, onError);
+ } else {
+ imageFileToBase64(file, onImageSuccess, onError);
+ }
+ } else {
+ fileToBase64(file, onAttachmentSuccess, onError);
+ }
+
+ return true;
+ }
+ }
+
+ return false;
+}
+function getMimeType(header) {
+ var mime = /^data:(image\/[-+a-z0-9.]+);base64/.exec(header);
+ return mime && mime.length > 1 ? mime[1] : null;
+}
+function base64EncodedLen(n) {
+ return Math.floor((n + 2) / 3) * 4;
+}
+function base64DecodedLen(n) {
+ return Math.floor(n / 4) * 3;
+}
+function base64ReEncode(str) {
+ if (str) {
+ str = str.replace(/-/g, '+').replace(/_/g, '/');
+
+ try {
+ str = btoa(atob(str));
+ } catch (err) {
+ console.log("Failed to base64 re-encode string.", err);
+ str = null;
+ }
+ }
+
+ return str;
+}
+
+/***/ }),
+
+/***/ "./src/lib/host-name.js":
+/*!******************************!*\
+ !*** ./src/lib/host-name.js ***!
+ \******************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "detectServerAddress": function() { return /* binding */ detectServerAddress; },
+/* harmony export */ "isSecureConnection": function() { return /* binding */ isSecureConnection; },
+/* harmony export */ "isLocalHost": function() { return /* binding */ isLocalHost; }
+/* harmony export */ });
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+
+function detectServerAddress() {
+ let host = _config_js__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_HOST;
+
+ if (typeof window.location == 'object') {
+ if (window.location.protocol == 'file:' || window.location.hostname == 'localhost') {
+ host = _config_js__WEBPACK_IMPORTED_MODULE_0__.KNOWN_HOSTS.local;
+ } else if (window.location.hostname) {
+ host = window.location.hostname + (window.location.port ? ':' + window.location.port : '');
+ }
+ }
+
+ return host;
+}
+function isSecureConnection() {
+ if (typeof window.location == 'object') {
+ return window.location.protocol == 'https:';
+ }
+
+ return false;
+}
+function isLocalHost() {
+ if (typeof window.location == 'object') {
+ return window.location.hostname == 'localhost';
+ }
+
+ return false;
+}
+
+/***/ }),
+
+/***/ "./src/lib/local-storage.js":
+/*!**********************************!*\
+ !*** ./src/lib/local-storage.js ***!
+ \**********************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ LocalStorageUtil; }
+/* harmony export */ });
+class LocalStorageUtil {
+ static setObject(key, value) {
+ localStorage.setItem(key, JSON.stringify(value));
+ }
+
+ static getObject(key) {
+ const value = localStorage.getItem(key);
+ return value && JSON.parse(value);
+ }
+
+ static updateObject(key, value) {
+ const oldVal = this.getObject(key);
+ this.setObject(key, Object.assign(oldVal || {}, value));
+ }
+
+ static removeItem(key) {
+ localStorage.removeItem(key);
+ }
+
+}
+
+/***/ }),
+
+/***/ "./src/lib/navigation.js":
+/*!*******************************!*\
+ !*** ./src/lib/navigation.js ***!
+ \*******************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ HashNavigation; }
+/* harmony export */ });
+class HashNavigation {
+ static parseUrlHash(hash) {
+ const parts = hash.split('?', 2);
+ const params = {};
+ let path = [];
+
+ if (parts[0]) {
+ path = parts[0].substr(1).split('/');
+ }
+
+ if (parts[1]) {
+ parts[1].split('&').forEach(function (part) {
+ let item = part.split('=');
+
+ if (item[0]) {
+ params[decodeURIComponent(item[0])] = decodeURIComponent(item[1]);
+ }
+ });
+ }
+
+ return {
+ path: path,
+ params: params
+ };
+ }
+
+ static navigateTo(url) {
+ window.location.hash = url;
+ }
+
+ static composeUrlHash(path, params) {
+ let url = path.join('/');
+ const args = [];
+
+ for (const key in params) {
+ if (params.hasOwnProperty(key)) {
+ args.push(key + '=' + params[key]);
+ }
+ }
+
+ if (args.length > 0) {
+ url += '?' + args.join('&');
+ }
+
+ return url;
+ }
+
+ static addUrlParam(hash, key, value) {
+ const parsed = this.parseUrlHash(hash);
+ parsed.params[key] = value;
+ return this.composeUrlHash(parsed.path, parsed.params);
+ }
+
+ static removeUrlParam(hash, key) {
+ const parsed = this.parseUrlHash(hash);
+ delete parsed.params[key];
+ return this.composeUrlHash(parsed.path, parsed.params);
+ }
+
+ static setUrlSidePanel(hash, sidepanel) {
+ const parsed = this.parseUrlHash(hash);
+ parsed.path[0] = sidepanel;
+ return this.composeUrlHash(parsed.path, parsed.params);
+ }
+
+ static setUrlTopic(hash, topic) {
+ const parsed = this.parseUrlHash(hash);
+ parsed.path[1] = topic;
+ delete parsed.params.info;
+ return this.composeUrlHash(parsed.path, parsed.params);
+ }
+
+}
+
+/***/ }),
+
+/***/ "./src/lib/strformat.js":
+/*!******************************!*\
+ !*** ./src/lib/strformat.js ***!
+ \******************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "shortDateFormat": function() { return /* binding */ shortDateFormat; },
+/* harmony export */ "secondsToTime": function() { return /* binding */ secondsToTime; },
+/* harmony export */ "bytesToHumanSize": function() { return /* binding */ bytesToHumanSize; },
+/* harmony export */ "stringHash": function() { return /* binding */ stringHash; }
+/* harmony export */ });
+function shortDateFormat(then, locale) {
+ locale = locale || window.navigator.userLanguage || window.navigator.language;
+ const now = new Date();
+
+ if (then.getFullYear() == now.getFullYear()) {
+ if (then.getMonth() == now.getMonth() && then.getDate() == now.getDate()) {
+ return then.toLocaleTimeString(locale, {
+ hour12: false,
+ hour: '2-digit',
+ minute: '2-digit'
+ });
+ } else {
+ return then.toLocaleDateString(locale, {
+ hour12: false,
+ month: 'short',
+ day: 'numeric',
+ hour: '2-digit',
+ minute: '2-digit'
+ });
+ }
+ }
+
+ return then.toLocaleDateString(locale, {
+ hour12: false,
+ year: 'numeric',
+ month: 'short',
+ day: 'numeric',
+ hour: '2-digit',
+ minute: '2-digit'
+ });
+}
+function secondsToTime(seconds) {
+ const min = Math.floor(seconds / 60);
+ let sec = seconds % 60;
+ sec = sec < 10 ? "0".concat(sec) : sec;
+ return "".concat(min, ":").concat(sec);
+}
+function bytesToHumanSize(bytes) {
+ if (!bytes || bytes == 0) {
+ return '0 Bytes';
+ }
+
+ const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];
+ const bucket = Math.min(Math.floor(Math.log2(bytes) / 10) | 0, sizes.length - 1);
+ const count = bytes / Math.pow(1024, bucket);
+ const round = bucket > 0 ? count < 3 ? 2 : count < 30 ? 1 : 0 : 0;
+ return count.toFixed(round) + ' ' + sizes[bucket];
+}
+function stringHash(value) {
+ let hash = 0;
+ value = '' + value;
+
+ for (let i = 0; i < value.length; i++) {
+ hash = (hash << 5) - hash + value.charCodeAt(i);
+ hash = hash & hash;
+ }
+
+ return hash;
+}
+
+/***/ }),
+
+/***/ "./src/lib/utils.js":
+/*!**************************!*\
+ !*** ./src/lib/utils.js ***!
+ \**************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "updateFavicon": function() { return /* binding */ updateFavicon; },
+/* harmony export */ "vcard": function() { return /* binding */ vcard; },
+/* harmony export */ "arrayEqual": function() { return /* binding */ arrayEqual; },
+/* harmony export */ "asPhone": function() { return /* binding */ asPhone; },
+/* harmony export */ "asEmail": function() { return /* binding */ asEmail; },
+/* harmony export */ "isUrlRelative": function() { return /* binding */ isUrlRelative; },
+/* harmony export */ "sanitizeUrl": function() { return /* binding */ sanitizeUrl; },
+/* harmony export */ "sanitizeImageUrl": function() { return /* binding */ sanitizeImageUrl; }
+/* harmony export */ });
+function updateFavicon(count) {
+ const oldIcon = document.getElementById('shortcut-icon');
+ const head = document.head || document.getElementsByTagName('head')[0];
+ const newIcon = document.createElement('link');
+ newIcon.type = 'image/png';
+ newIcon.id = 'shortcut-icon';
+ newIcon.rel = 'shortcut icon';
+ newIcon.href = 'img/logo32x32' + (count > 0 ? 'a' : '') + '.png';
+
+ if (oldIcon) {
+ head.removeChild(oldIcon);
+ }
+
+ head.appendChild(newIcon);
+ document.title = (count > 0 ? '(' + count + ') ' : '') + 'Tinode';
+}
+function vcard(fn, imageDataUrl) {
+ let card = null;
+
+ if (fn && fn.trim() || imageDataUrl) {
+ card = {};
+
+ if (fn) {
+ card.fn = fn.trim();
+ }
+
+ if (imageDataUrl) {
+ const dataStart = imageDataUrl.indexOf(',');
+ card.photo = dataStart >= 0 ? {
+ data: imageDataUrl.substring(dataStart + 1),
+ type: 'jpg'
+ } : imageDataUrl;
+ }
+ }
+
+ return card;
+}
+function arrayEqual(a, b) {
+ if (a === b) {
+ return true;
+ }
+
+ if (!Array.isArray(a) || !Array.isArray(b)) {
+ return false;
+ }
+
+ if (a.length != b.length) {
+ return false;
+ }
+
+ a.sort();
+ b.sort();
+
+ for (let i = 0, l = a.length; i < l; i++) {
+ if (a[i] !== b[i]) {
+ return false;
+ }
+ }
+
+ return true;
+}
+function asPhone(val) {
+ val = val.trim();
+
+ if (/^(?:\+?(\d{1,3}))?[- (.]*(\d{3})[- ).]*(\d{3})[- .]*(\d{2})[- .]*(\d{2})?$/.test(val)) {
+ return val.replace(/[- ().]*/, '');
+ }
+
+ return null;
+}
+function asEmail(val) {
+ val = val.trim();
+
+ if (/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/.test(val)) {
+ return val;
+ }
+
+ return null;
+}
+function isUrlRelative(url) {
+ return url && !/^\s*([a-z][a-z0-9+.-]*:|\/\/)/im.test(url);
+}
+function sanitizeUrl(url, allowedSchemes) {
+ if (!url) {
+ return null;
+ }
+
+ url = url.replace(/[^\x20-\x7E]/gmi, '').trim();
+
+ if (!/^([a-z][a-z0-9+.-]*:|\/\/)/i.test(url)) {
+ return url;
+ }
+
+ if (/^blob:http/.test(url)) {
+ return url;
+ }
+
+ const schemes = Array.isArray(allowedSchemes) ? allowedSchemes.join('|') : 'http|https';
+ const re = new RegExp('^((' + schemes + '):|//)', 'i');
+
+ if (!re.test(url)) {
+ return null;
+ }
+
+ return url;
+}
+function sanitizeImageUrl(url) {
+ if (!url) {
+ return null;
+ }
+
+ const sanitizedUrl = sanitizeUrl(url);
+
+ if (sanitizedUrl) {
+ return sanitizedUrl;
+ }
+
+ if (/data:image\/[a-z0-9.-]+;base64,/i.test(url.trim())) {
+ return url;
+ }
+
+ return null;
+}
+
+/***/ }),
+
+/***/ "./src/version.js":
+/*!************************!*\
+ !*** ./src/version.js ***!
+ \************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "PACKAGE_VERSION": function() { return /* binding */ PACKAGE_VERSION; }
+/* harmony export */ });
+const PACKAGE_VERSION = "0.16.10";
+
+/***/ }),
+
+/***/ "./src/views/acc-general-view.jsx":
+/*!****************************************!*\
+ !*** ./src/views/acc-general-view.jsx ***!
+ \****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ AccGeneralView; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _widgets_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/avatar-upload.jsx */ "./src/widgets/avatar-upload.jsx");
+/* harmony import */ var _widgets_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/in-place-edit.jsx */ "./src/widgets/in-place-edit.jsx");
+/* harmony import */ var _widgets_tag_manager_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../widgets/tag-manager.jsx */ "./src/widgets/tag-manager.jsx");
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
+/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
+
+
+
+
+
+
+
+
+
+class AccGeneralView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ const me = this.props.tinode.getMeTopic();
+ this.state = {
+ fullName: me.public ? me.public.fn : undefined,
+ avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_7__.makeImageUrl)(me.public ? me.public.photo : null),
+ tags: me.tags(),
+ credentials: me.getCredentials() || [],
+ addCredActive: false,
+ addCredInvalid: false,
+ newCred: '',
+ previousOnTags: me.onTagsUpdated
+ };
+ this.tnNewTags = this.tnNewTags.bind(this);
+ this.tnCredsUpdated = this.tnCredsUpdated.bind(this);
+ this.handleFullNameUpdate = this.handleFullNameUpdate.bind(this);
+ this.handleImageChanged = this.handleImageChanged.bind(this);
+ this.handleCredChange = this.handleCredChange.bind(this);
+ this.handleCredKeyDown = this.handleCredKeyDown.bind(this);
+ this.handleCredEntered = this.handleCredEntered.bind(this);
+ this.handleTagsUpdated = this.handleTagsUpdated.bind(this);
+ }
+
+ componentDidMount() {
+ const me = this.props.tinode.getMeTopic();
+ me.onCredsUpdated = this.tnCredsUpdated;
+ me.onTagsUpdated = this.tnNewTags;
+ }
+
+ componentWillUnmount() {
+ const me = this.props.tinode.getMeTopic();
+ me.onTagsUpdated = this.state.previousOnTags;
+ me.onCredsUpdated = undefined;
+ }
+
+ tnNewTags(tags) {
+ this.setState({
+ tags: tags
+ });
+ }
+
+ tnCredsUpdated(creds) {
+ this.setState({
+ credentials: creds || []
+ });
+ }
+
+ handleFullNameUpdate(fn) {
+ fn = fn.trim().substring(0, _config_js__WEBPACK_IMPORTED_MODULE_6__.MAX_TITLE_LENGTH);
+
+ if (fn) {
+ this.setState({
+ fullName: fn
+ });
+ this.props.onUpdateAccount(undefined, (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_8__.vcard)(fn, null));
+ }
+ }
+
+ handleImageChanged(img) {
+ this.setState({
+ avatar: img
+ });
+ this.props.onUpdateAccount(undefined, (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_8__.vcard)(null, img || (tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().DEL_CHAR)));
+ }
+
+ handleCredChange(e) {
+ this.setState({
+ newCred: e.target.value,
+ addCredInvalid: false
+ });
+ }
+
+ handleCredKeyDown(e) {
+ if (e.keyCode === 27) {
+ this.setState({
+ newCred: '',
+ addCredActive: false
+ });
+ } else if (e.keyCode === 13) {
+ this.handleCredEntered(e);
+ }
+ }
+
+ handleCredEntered(e) {
+ let value = this.state.newCred.trim();
+
+ if (!value) {
+ this.setState({
+ addCredActive: false,
+ addCredInvalid: false
+ });
+ return;
+ }
+
+ let val = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_8__.asPhone)(value);
+ let method;
+
+ if (val) {
+ method = 'tel';
+ } else {
+ val = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_8__.asEmail)(value);
+
+ if (val) {
+ method = 'email';
+ }
+ }
+
+ if (method) {
+ this.props.onCredAdd(method, val);
+ this.setState({
+ addCredActive: false,
+ newCred: ''
+ });
+ } else {
+ this.setState({
+ addCredInvalid: true
+ });
+ }
+ }
+
+ handleTagsUpdated(tags) {
+ if ((0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_8__.arrayEqual)(this.state.tags.slice(0), tags.slice(0))) {
+ return;
+ }
+
+ this.props.onUpdateTags(tags);
+ }
+
+ render() {
+ const credentials = [];
+ this.state.credentials.map(cred => {
+ credentials.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ key: cred.meth + ":" + cred.val + ":" + cred.done
+ }, cred.meth, ": ", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tt", null, cred.val), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, " ", !cred.done ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onCredConfirm(cred.meth, cred.val);
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "validate_credential_action",
+ defaultMessage: [{
+ "type": 0,
+ "value": "confirm"
+ }]
+ })) : null, " ", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onCredDelete(cred.meth, cred.val);
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons gray"
+ }, "delete_outline")))));
+ });
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "scrollable-panel"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-column"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_your_name",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Your name"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "full_name_prompt",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Full name, e.g. John Doe"
+ }]
+ }, full_name_placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_4__.default, {
+ placeholder: full_name_placeholder,
+ value: this.state.fullName,
+ onFinished: this.handleFullNameUpdate
+ })))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_3__.default, {
+ avatar: this.state.avatar,
+ uid: this.props.myUserId,
+ title: this.state.fullName,
+ onImageChanged: this.handleImageChanged,
+ onError: this.props.onError
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "hr"
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "title_tag_manager",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Tags (user discovery)"
+ }]
+ }, title_tag_manager => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_tag_manager_jsx__WEBPACK_IMPORTED_MODULE_5__.default, {
+ title: title_tag_manager,
+ activated: false,
+ tags: this.state.tags,
+ tinode: this.props.tinode,
+ onSubmit: this.handleTagsUpdated
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "hr"
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-column"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_user_contacts",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Contacts:"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "quoted"
+ }, credentials, this.state.addCredActive ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
+ type: "text",
+ value: this.state.value,
+ className: this.state.addCredInvalid ? 'invalid' : null,
+ placeholder: "Phone number or email",
+ required: "required",
+ autoFocus: true,
+ onChange: this.handleCredChange,
+ onKeyDown: this.handleCredKeyDown,
+ onBlur: this.handleCredEntered
+ }) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.setState({
+ addCredActive: true
+ });
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "add"), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_add_another",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Add another"
+ }]
+ }))))));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/views/acc-notifications-view.jsx":
+/*!**********************************************!*\
+ !*** ./src/views/acc-notifications-view.jsx ***!
+ \**********************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ EditAccountView; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/checkbox.jsx */ "./src/widgets/checkbox.jsx");
+
+
+
+class EditAccountView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.handleCheckboxClick = this.handleCheckboxClick.bind(this);
+ }
+
+ handleCheckboxClick(what, checked) {
+ if (what == 'sound') {
+ this.props.onToggleMessageSounds(checked);
+ } else if (what == 'alert') {
+ this.props.onTogglePushNotifications(checked);
+ } else if (what == 'incognito') {
+ this.props.onToggleIncognitoMode(checked);
+ }
+ }
+
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "scrollable-panel"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ htmlFor: "message-sound"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_message_sound",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Message sound:"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ name: "sound",
+ id: "message-sound",
+ checked: this.props.messageSounds,
+ onChange: this.handleCheckboxClick
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ htmlFor: "desktop-alerts"
+ }, this.props.desktopAlertsEnabled ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_push_notifications",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Notification alerts:"
+ }]
+ }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_push_notifications_disabled",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Notification alerts (requires HTTPS):"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ name: "alert",
+ id: "desktop-alerts",
+ checked: this.props.desktopAlerts,
+ onChange: this.props.desktopAlertsEnabled ? this.handleCheckboxClick : null
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ htmlFor: "incognito-mode"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_incognito_mode",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Incognito mode:"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ name: "incognito",
+ id: "incognito-mode",
+ checked: this.props.incognitoMode,
+ onChange: this.handleCheckboxClick
+ })));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/views/acc-security-view.jsx":
+/*!*****************************************!*\
+ !*** ./src/views/acc-security-view.jsx ***!
+ \*****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _widgets_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/in-place-edit.jsx */ "./src/widgets/in-place-edit.jsx");
+/* harmony import */ var _widgets_permissions_editor_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/permissions-editor.jsx */ "./src/widgets/permissions-editor.jsx");
+
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ delete_account: {
+ "id": "delete_account",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Delete account"
+ }]
+ },
+ delete_account_warning: {
+ "id": "delete_account_arning",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Are you sure you want to delete your account? It cannot be undone."
+ }]
+ }
+});
+
+class AccSecurityView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ const me = this.props.tinode.getMeTopic();
+ let blockedCount = 0;
+ me.contacts(c => {
+ if (c.acs && !c.acs.isJoiner()) {
+ blockedCount++;
+ }
+ });
+ const defacs = me.getDefaultAccess();
+ this.state = {
+ auth: defacs ? defacs.auth : null,
+ anon: defacs ? defacs.anon : null,
+ showPermissionEditorFor: undefined,
+ blockedCount: blockedCount
+ };
+ this.handlePasswordUpdate = this.handlePasswordUpdate.bind(this);
+ this.handleLaunchPermissionsEditor = this.handleLaunchPermissionsEditor.bind(this);
+ this.handleHidePermissionsEditor = this.handleHidePermissionsEditor.bind(this);
+ this.handlePermissionsChanged = this.handlePermissionsChanged.bind(this);
+ this.handleDeleteAccount = this.handleDeleteAccount.bind(this);
+ }
+
+ handlePasswordUpdate(pwd) {
+ this.setState({
+ password: pwd
+ });
+ this.props.onUpdateAccount(pwd);
+ }
+
+ handleLaunchPermissionsEditor(which) {
+ this.setState({
+ showPermissionEditorFor: which,
+ editedPermissions: this.state[which]
+ });
+ }
+
+ handleHidePermissionsEditor() {
+ this.setState({
+ showPermissionEditorFor: undefined
+ });
+ }
+
+ handlePermissionsChanged(perm) {
+ let defacs = {};
+ defacs[this.state.showPermissionEditorFor] = perm;
+ this.props.onUpdateAccount(undefined, undefined, defacs);
+ let newState = {
+ showPermissionEditorFor: undefined
+ };
+ newState[this.state.showPermissionEditorFor] = perm;
+ this.setState(newState);
+ }
+
+ handleDeleteAccount(e) {
+ e.preventDefault();
+ const {
+ formatMessage
+ } = this.props.intl;
+ this.props.onShowAlert(formatMessage(messages.delete_account), formatMessage(messages.delete_account_warning), () => {
+ this.props.onDeleteAccount();
+ }, null, true, null);
+ }
+
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, this.state.showPermissionEditorFor ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_permissions_editor_jsx__WEBPACK_IMPORTED_MODULE_3__.default, {
+ mode: this.state.editedPermissions,
+ skip: "O",
+ onSubmit: this.handlePermissionsChanged,
+ onCancel: this.handleHidePermissionsEditor
+ }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "scrollable-panel"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-column"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_password",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Password"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "password_unchanged_prompt",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Unchanged"
+ }]
+ }, password_unchanged => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ placeholder: password_unchanged,
+ type: "password",
+ onFinished: this.handlePasswordUpdate
+ })))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "hr"
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-column"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ className: "red flat-button",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onLogout();
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "exit_to_app"), " \xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_logout",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Logout"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ className: "red flat-button",
+ onClick: e => {
+ this.handleDeleteAccount(e);
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "delete"), " \xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_delete_account",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Delete account"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "hr"
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-column"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_default_access_mode",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Default access mode:"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "quoted"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, "Auth: ", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tt", {
+ className: "clickable",
+ onClick: this.handleLaunchPermissionsEditor.bind(this, 'auth')
+ }, this.state.auth)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, "Anon: ", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tt", {
+ className: "clickable",
+ onClick: this.handleLaunchPermissionsEditor.bind(this, 'anon')
+ }, this.state.anon)))), this.state.blockedCount > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "hr"
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "block"), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ className: "gray",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onShowBlocked();
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "blocked_contacts_link",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Blocked contacts ("
+ }, {
+ "type": 1,
+ "value": "count"
+ }, {
+ "type": 0,
+ "value": ")"
+ }],
+ values: {
+ count: this.state.blockedCount
+ }
+ })))) : null));
+ }
+
+}
+
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(AccSecurityView));
+
+/***/ }),
+
+/***/ "./src/views/acc-support-view.jsx":
+/*!****************************************!*\
+ !*** ./src/views/acc-support-view.jsx ***!
+ \****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ AccSupportView; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+
+
+
+
+class AccSupportView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "scrollable-panel"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-column"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: _config_js__WEBPACK_IMPORTED_MODULE_3__.LINK_CONTACT_US,
+ className: "flat-button",
+ target: "_blank"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "email"), " \xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "link_contact_us",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Contact Us"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: _config_js__WEBPACK_IMPORTED_MODULE_3__.LINK_TERMS_OF_SERVICE,
+ className: "flat-button",
+ target: "_blank"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "description"), " \xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "link_terms_of_service",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Terms of Service"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: _config_js__WEBPACK_IMPORTED_MODULE_3__.LINK_PRIVACY_POLICY,
+ className: "flat-button",
+ target: "_blank"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "policy"), " \xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "link_privacy_policy",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Privacy Policy"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "hr"
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-column"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_client",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Client:"
+ }]
+ })), _config_js__WEBPACK_IMPORTED_MODULE_3__.APP_NAME), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_sdk",
+ defaultMessage: [{
+ "type": 0,
+ "value": "SDK:"
+ }]
+ })), tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().getLibrary()), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_server",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Server:"
+ }]
+ })), this.props.serverVersion), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_server_address",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Server address:"
+ }]
+ })), this.props.serverAddress)));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/views/contacts-view.jsx":
+/*!*************************************!*\
+ !*** ./src/views/contacts-view.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ ContactsView; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/contact-list.jsx */ "./src/widgets/contact-list.jsx");
+/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
+
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ archived_contacts_title: {
+ "id": "archived_contacts",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Archived contacts ("
+ }, {
+ "type": 1,
+ "value": "count"
+ }, {
+ "type": 0,
+ "value": ")"
+ }]
+ }
+});
+class ContactsView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.handleAction = this.handleAction.bind(this);
+ this.state = ContactsView.deriveStateFromProps(props);
+ }
+
+ static deriveStateFromProps(props) {
+ const contacts = [];
+ let unreadThreads = 0;
+ let archivedCount = 0;
+ props.chatList.map(c => {
+ const blocked = c.acs && !c.acs.isJoiner();
+
+ if (blocked && props.blocked) {
+ contacts.push(c);
+ }
+
+ if (blocked || props.blocked) {
+ return;
+ }
+
+ if (c.private && c.private.arch) {
+ if (props.archive) {
+ contacts.push(c);
+ } else {
+ archivedCount++;
+ }
+ } else if (!props.archive) {
+ contacts.push(c);
+ unreadThreads += c.unread > 0 ? 1 : 0;
+ }
+ });
+ contacts.sort((a, b) => {
+ return (b.touched || 0) - (a.touched || 0);
+ });
+
+ if (archivedCount > 0) {
+ contacts.push({
+ action: 'archive',
+ title: messages.archived_contacts_title,
+ values: {
+ count: archivedCount
+ }
+ });
+ }
+
+ return {
+ contactList: contacts,
+ unreadThreads: unreadThreads
+ };
+ }
+
+ componentDidUpdate(prevProps, prevState) {
+ if (prevProps.chatList != this.props.chatList || prevProps.archive != this.props.archive || prevProps.blocked != this.props.blocked) {
+ const newState = ContactsView.deriveStateFromProps(this.props);
+ this.setState(newState);
+
+ if (newState.unreadThreads != prevState.unreadThreads) {
+ (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_3__.updateFavicon)(newState.unreadThreads);
+ }
+ }
+ }
+
+ handleAction(action_ignored) {
+ this.props.onShowArchive();
+ }
+
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "contacts_not_found",
+ defaultMessage: [{
+ "type": 0,
+ "value": "You have no chats"
+ }, {
+ "type": 0,
+ "value": "
"
+ }, {
+ "type": 0,
+ "value": "¯∖_(ツ)_/¯"
+ }]
+ }, no_contacts => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ connected: this.props.connected,
+ contacts: this.state.contactList,
+ emptyListMessage: no_contacts,
+ topicSelected: this.props.topicSelected,
+ myUserId: this.props.myUserId,
+ showOnline: true,
+ showUnread: true,
+ onTopicSelected: this.props.onTopicSelected,
+ showContextMenu: this.props.showContextMenu,
+ onAction: this.handleAction
+ }));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/views/create-account-view.jsx":
+/*!*******************************************!*\
+ !*** ./src/views/create-account-view.jsx ***!
+ \*******************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ CreateAccountView; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _widgets_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/avatar-upload.jsx */ "./src/widgets/avatar-upload.jsx");
+/* harmony import */ var _widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/checkbox.jsx */ "./src/widgets/checkbox.jsx");
+/* harmony import */ var _widgets_visible_password_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/visible-password.jsx */ "./src/widgets/visible-password.jsx");
+/* harmony import */ var _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/local-storage.js */ "./src/lib/local-storage.js");
+/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+
+
+
+
+
+
+
+
+class CreateAccountView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ login: '',
+ password: '',
+ email: '',
+ fn: '',
+ imageDataUrl: null,
+ errorCleared: false,
+ saveToken: _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_5__.default.getObject('keep-logged-in')
+ };
+ this.handleLoginChange = this.handleLoginChange.bind(this);
+ this.handlePasswordChange = this.handlePasswordChange.bind(this);
+ this.handleEmailChange = this.handleEmailChange.bind(this);
+ this.handleFnChange = this.handleFnChange.bind(this);
+ this.handleImageChanged = this.handleImageChanged.bind(this);
+ this.handleToggleSaveToken = this.handleToggleSaveToken.bind(this);
+ this.handleSubmit = this.handleSubmit.bind(this);
+ }
+
+ handleLoginChange(e) {
+ this.setState({
+ login: e.target.value
+ });
+ }
+
+ handlePasswordChange(password) {
+ this.setState({
+ password: password
+ });
+ }
+
+ handleEmailChange(e) {
+ this.setState({
+ email: e.target.value
+ });
+ }
+
+ handleFnChange(e) {
+ this.setState({
+ fn: e.target.value
+ });
+ }
+
+ handleImageChanged(img) {
+ this.setState({
+ imageDataUrl: img
+ });
+ }
+
+ handleToggleSaveToken() {
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_5__.default.setObject('keep-logged-in', !this.state.saveToken);
+ this.setState({
+ saveToken: !this.state.saveToken
+ });
+ }
+
+ handleSubmit(e) {
+ e.preventDefault();
+ this.setState({
+ errorCleared: false
+ });
+ this.props.onCreateAccount(this.state.login.trim(), this.state.password.trim(), (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_6__.vcard)(this.state.fn.trim().substring(0, _config_js__WEBPACK_IMPORTED_MODULE_7__.MAX_TITLE_LENGTH), this.state.imageDataUrl), {
+ 'meth': 'email',
+ 'val': this.state.email
+ });
+ }
+
+ render() {
+ let submitClasses = 'blue';
+
+ if (this.props.disabled) {
+ submitClasses += ' disabled';
+ }
+
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("form", {
+ className: "panel-form-column",
+ onSubmit: this.handleSubmit
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-column"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "login_prompt",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Login"
+ }]
+ }, login_prompt => react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
+ type: "text",
+ placeholder: login_prompt,
+ autoComplete: "user-name",
+ value: this.state.login,
+ onChange: this.handleLoginChange,
+ required: true,
+ autoFocus: true
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "password_prompt",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Password"
+ }]
+ }, password_prompt => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_visible_password_jsx__WEBPACK_IMPORTED_MODULE_4__.default, {
+ placeholder: password_prompt,
+ autoComplete: "new-password",
+ value: this.state.password,
+ onFinished: this.handlePasswordChange,
+ required: true
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ onImageChanged: this.handleImageChanged,
+ onError: this.props.onError
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "full_name_prompt",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Full name, e.g. John Doe"
+ }]
+ }, full_name_prompt => react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
+ type: "text",
+ placeholder: full_name_prompt,
+ autoComplete: "name",
+ value: this.state.fn,
+ onChange: this.handleFnChange,
+ required: true
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "email_prompt",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Email, e.g. jdoe@example.com"
+ }]
+ }, email_prompt => react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
+ type: "email",
+ placeholder: email_prompt,
+ autoComplete: "email",
+ value: this.state.email,
+ onChange: this.handleEmailChange,
+ required: true
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_3__.default, {
+ id: "save-token",
+ name: "save-token",
+ checked: this.state.saveToken,
+ onChange: this.handleToggleSaveToken
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "stay_logged_in",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Stay logged in"
+ }]
+ }, stay_logged_in => react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ htmlFor: "save-token"
+ }, "\xA0", stay_logged_in))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "dialog-buttons"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
+ className: submitClasses,
+ type: "submit"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_sign_up",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Sign up"
+ }]
+ }))));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/views/edit-account-view.jsx":
+/*!*****************************************!*\
+ !*** ./src/views/edit-account-view.jsx ***!
+ \*****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ EditAccountView; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _widgets_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/avatar-upload.jsx */ "./src/widgets/avatar-upload.jsx");
+/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
+
+
+
+
+class EditAccountView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ const me = this.props.tinode.getMeTopic();
+ this.state = {
+ fullName: me.public ? me.public.fn : undefined,
+ avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_3__.makeImageUrl)(me.public ? me.public.photo : null)
+ };
+ }
+
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "scrollable-panel"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-column"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_your_name",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Your name"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "large"
+ }, this.state.fullName), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_user_id",
+ defaultMessage: [{
+ "type": 0,
+ "value": "ID:"
+ }]
+ })), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tt", null, this.props.myUserId))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ avatar: this.state.avatar,
+ readOnly: !this.state.owner,
+ uid: this.props.myUserId,
+ title: this.state.fullName
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ className: "flat-button",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onBasicNavigate('general');
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "edit"), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_edit",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Edit"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "hr"
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-column"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ className: "flat-button",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onBasicNavigate('notif');
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "notifications"), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "sidepanel_title_acc_notifications",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Notifications"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ className: "flat-button",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onBasicNavigate('security');
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "security"), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "sidepanel_title_acc_security",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Security"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ className: "flat-button",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onBasicNavigate('support');
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "contact_support"), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "sidepanel_title_acc_support",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Support"
+ }]
+ }))));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/views/info-view.jsx":
+/*!*********************************!*\
+ !*** ./src/views/info-view.jsx ***!
+ \*********************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _widgets_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/avatar-upload.jsx */ "./src/widgets/avatar-upload.jsx");
+/* harmony import */ var _widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/checkbox.jsx */ "./src/widgets/checkbox.jsx");
+/* harmony import */ var _widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../widgets/contact-list.jsx */ "./src/widgets/contact-list.jsx");
+/* harmony import */ var _widgets_error_panel_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../widgets/error-panel.jsx */ "./src/widgets/error-panel.jsx");
+/* harmony import */ var _widgets_group_manager_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../widgets/group-manager.jsx */ "./src/widgets/group-manager.jsx");
+/* harmony import */ var _widgets_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../widgets/in-place-edit.jsx */ "./src/widgets/in-place-edit.jsx");
+/* harmony import */ var _widgets_menu_cancel_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../widgets/menu-cancel.jsx */ "./src/widgets/menu-cancel.jsx");
+/* harmony import */ var _widgets_more_button_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../widgets/more-button.jsx */ "./src/widgets/more-button.jsx");
+/* harmony import */ var _widgets_permissions_editor_jsx__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../widgets/permissions-editor.jsx */ "./src/widgets/permissions-editor.jsx");
+/* harmony import */ var _widgets_tag_manager_jsx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../widgets/tag-manager.jsx */ "./src/widgets/tag-manager.jsx");
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
+/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ requested: {
+ "id": "requested_permissions",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Requested"
+ }]
+ },
+ granted: {
+ "id": "granted_permissions",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Granted"
+ }]
+ },
+ edit_permissions: {
+ "id": "menu_item_edit_permissions",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Edit permissions"
+ }]
+ },
+ other_user: {
+ "id": "label_other_user",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Other"
+ }]
+ },
+ clear_messages: {
+ "id": "action_clear_messages",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Clear Messages"
+ }]
+ },
+ clear_messages_warning: {
+ "id": "clear_messages_warning",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Are you sure you want to clear all messages? It cannot be undone."
+ }]
+ },
+ delete_messages: {
+ "id": "action_delete_messages",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Clear Messages for All"
+ }]
+ },
+ delete_messages_warning: {
+ "id": "delete_messages_warning",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Are you sure you want to delete all messages for everyone? It cannot be undone."
+ }]
+ },
+ leave_chat: {
+ "id": "action_leave_chat",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Leave Conversation"
+ }]
+ },
+ leave_chat_warning: {
+ "id": "leave_chat_warning",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Are you sure you want to leave this conversation?"
+ }]
+ },
+ block_contact: {
+ "id": "action_block_contact",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Block Contact"
+ }]
+ },
+ block_contact_warning: {
+ "id": "block_contact_warning",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Are you sure you want to block this contact?"
+ }]
+ },
+ report_chat: {
+ "id": "action_report_chat",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Report Conversation"
+ }]
+ },
+ report_chat_warning: {
+ "id": "report_chat_warning",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Are you sure you want to block and report this conversation?"
+ }]
+ }
+});
+
+class InfoView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ topic: null,
+ owner: false,
+ admin: false,
+ sharer: false,
+ deleter: false,
+ muted: false,
+ address: null,
+ groupTopic: undefined,
+ channel: undefined,
+ fullName: undefined,
+ avatar: null,
+ private: null,
+ selectedContact: null,
+ access: null,
+ modeGiven: null,
+ modeWant: null,
+ modeGiven2: null,
+ modeWant2: null,
+ auth: null,
+ anon: null,
+ contactList: [],
+ tags: [],
+ showMemberPanel: false,
+ showPermissionEditorFor: undefined,
+ moreInfoExpanded: false,
+ previousMetaDesc: undefined,
+ previousSubsUpdated: undefined,
+ previousTagsUpdated: undefined
+ };
+ this.resetSubs = this.resetSubs.bind(this);
+ this.resetDesc = this.resetDesc.bind(this);
+ this.onMetaDesc = this.onMetaDesc.bind(this);
+ this.onSubsUpdated = this.onSubsUpdated.bind(this);
+ this.onTagsUpdated = this.onTagsUpdated.bind(this);
+ this.handleFullNameUpdate = this.handleFullNameUpdate.bind(this);
+ this.handlePrivateUpdate = this.handlePrivateUpdate.bind(this);
+ this.handleImageChanged = this.handleImageChanged.bind(this);
+ this.handleMuted = this.handleMuted.bind(this);
+ this.handlePermissionsChanged = this.handlePermissionsChanged.bind(this);
+ this.handleLaunchPermissionsEditor = this.handleLaunchPermissionsEditor.bind(this);
+ this.handleHidePermissionsEditor = this.handleHidePermissionsEditor.bind(this);
+ this.handleShowAddMembers = this.handleShowAddMembers.bind(this);
+ this.handleHideAddMembers = this.handleHideAddMembers.bind(this);
+ this.handleMemberUpdateRequest = this.handleMemberUpdateRequest.bind(this);
+ this.handleDeleteMessages = this.handleDeleteMessages.bind(this);
+ this.handleLeave = this.handleLeave.bind(this);
+ this.handleBlock = this.handleBlock.bind(this);
+ this.handleReport = this.handleReport.bind(this);
+ this.handleMemberSelected = this.handleMemberSelected.bind(this);
+ this.handleMoreInfo = this.handleMoreInfo.bind(this);
+ this.handleTagsUpdated = this.handleTagsUpdated.bind(this);
+ this.handleContextMenu = this.handleContextMenu.bind(this);
+ }
+
+ componentDidUpdate(props) {
+ const topic = this.props.tinode.getTopic(props.topic);
+
+ if (!topic) {
+ return;
+ }
+
+ if (this.onMetaDesc != topic.onMetaDesc) {
+ this.previousMetaDesc = topic.onMetaDesc;
+ topic.onMetaDesc = this.onMetaDesc;
+ this.previousSubsUpdated = topic.onSubsUpdated;
+ topic.onSubsUpdated = this.onSubsUpdated;
+
+ if (topic.getType() == 'grp') {
+ this.previousTagsUpdated = topic.onTagsUpdated;
+ topic.onTagsUpdated = this.onTagsUpdated;
+ } else {
+ this.previousTagsUpdated = undefined;
+ }
+ }
+
+ if (this.state.topic != props.topic) {
+ this.setState({
+ topic: props.topic
+ });
+ this.resetDesc(topic, props);
+ this.resetSubs(topic, props);
+ }
+ }
+
+ componentWillUnmount() {
+ const topic = this.props.tinode.getTopic(this.props.topic);
+
+ if (!topic) {
+ return;
+ }
+
+ this.setState({
+ topic: null
+ });
+ topic.onMetaDesc = this.previousMetaDesc;
+ topic.onSubsUpdated = this.previousSubsUpdated;
+ topic.onTagsUpdated = this.previousTagsUpdated;
+ }
+
+ resetSubs(topic, props) {
+ const newState = {
+ contactList: []
+ };
+
+ if (topic.getType() == 'p2p') {
+ const user2 = topic.subscriber(props.topic);
+
+ if (user2) {
+ newState.modeGiven2 = user2.acs.getGiven();
+ newState.modeWant2 = user2.acs.getWant();
+ } else {
+ newState.modeGiven2 = _config_js__WEBPACK_IMPORTED_MODULE_13__.NO_ACCESS_MODE;
+ newState.modeWant2 = _config_js__WEBPACK_IMPORTED_MODULE_13__.NO_ACCESS_MODE;
+ }
+ } else {
+ topic.subscribers(sub => {
+ newState.contactList.push(sub);
+ }, this);
+ }
+
+ this.setState(newState);
+ }
+
+ resetDesc(topic, props) {
+ const defacs = topic.getDefaultAccess() || {};
+ const acs = topic.getAccessMode();
+ this.setState({
+ owner: acs && acs.isOwner(),
+ admin: acs && acs.isAdmin(),
+ sharer: acs && acs.isSharer(),
+ deleter: acs && acs.isDeleter(),
+ muted: acs && acs.isMuted(),
+ fullName: topic.public ? topic.public.fn : undefined,
+ avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_14__.makeImageUrl)(topic.public ? topic.public.photo : null),
+ private: topic.private ? topic.private.comment : null,
+ address: topic.name,
+ groupTopic: topic.getType() == 'grp',
+ channel: topic.isChannel(),
+ showMemberPanel: false,
+ access: acs ? acs.getMode() : undefined,
+ modeGiven: acs ? acs.getGiven() : undefined,
+ modeWant: acs ? acs.getWant() : undefined,
+ auth: defacs.auth,
+ anon: defacs.anon
+ });
+
+ if (topic.getType() == 'grp' && acs && acs.isOwner()) {
+ topic.getMeta(topic.startMetaQuery().withTags().build());
+ }
+ }
+
+ onMetaDesc(desc) {
+ const topic = this.props.tinode.getTopic(this.props.topic);
+
+ if (!topic) {
+ return;
+ }
+
+ this.resetDesc(topic, this.props);
+
+ if (this.previousMetaDesc && this.previousMetaDesc != this.onMetaDesc) {
+ this.previousMetaDesc(desc);
+ }
+ }
+
+ onSubsUpdated(subs) {
+ const topic = this.props.tinode.getTopic(this.props.topic);
+
+ if (!topic) {
+ return;
+ }
+
+ this.resetSubs(topic, this.props);
+
+ if (this.previousSubsUpdated && this.previousSubsUpdated != this.onSubsUpdated) {
+ this.previousSubsUpdated(subs);
+ }
+ }
+
+ onTagsUpdated(tags) {
+ this.setState({
+ tags: tags
+ });
+
+ if (this.previousTagsUpdated && this.previousTagsUpdated != this.onTagsUpdated) {
+ this.previousTagsUpdated();
+ }
+ }
+
+ handleFullNameUpdate(fn) {
+ fn = fn.trim().substring(0, _config_js__WEBPACK_IMPORTED_MODULE_13__.MAX_TITLE_LENGTH);
+
+ if (this.state.fullName !== fn) {
+ this.setState({
+ fullName: fn
+ });
+ this.props.onTopicDescUpdate(this.props.topic, (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_15__.vcard)(fn, null), null);
+ }
+ }
+
+ handlePrivateUpdate(comment) {
+ comment = comment.trim().substring(0, _config_js__WEBPACK_IMPORTED_MODULE_13__.MAX_TITLE_LENGTH);
+
+ if (this.state.private !== comment) {
+ this.setState({
+ private: comment
+ });
+ this.props.onTopicDescUpdate(this.props.topic, null, comment || (tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().DEL_CHAR));
+ }
+ }
+
+ handleImageChanged(img) {
+ this.setState({
+ avatar: img
+ });
+ this.props.onTopicDescUpdate(this.props.topic, (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_15__.vcard)(null, img || (tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().DEL_CHAR)), null);
+ }
+
+ handleMuted(ignored, checked) {
+ this.setState({
+ muted: checked
+ });
+ this.props.onChangePermissions(this.props.topic, checked ? '-P' : '+P');
+ }
+
+ handlePermissionsChanged(perm) {
+ switch (this.state.showPermissionEditorFor) {
+ case 'auth':
+ this.props.onTopicDescUpdate(this.props.topic, null, null, {
+ auth: perm
+ });
+ break;
+
+ case 'anon':
+ this.props.onTopicDescUpdate(this.props.topic, null, null, {
+ anon: perm
+ });
+ break;
+
+ case 'mode':
+ case 'want':
+ this.props.onChangePermissions(this.props.topic, perm);
+ break;
+
+ case 'given':
+ this.props.onChangePermissions(this.props.topic, perm, this.props.topic);
+ break;
+
+ case 'user':
+ this.props.onChangePermissions(this.props.topic, perm, this.state.userPermissionsEdited);
+ break;
+ }
+
+ this.setState({
+ showPermissionEditorFor: undefined
+ });
+ }
+
+ handleLaunchPermissionsEditor(which, uid) {
+ const {
+ formatMessage
+ } = this.props.intl;
+ let toEdit, toCompare, toSkip, titleEdit, titleCompare, userTitle, userAvatar;
+
+ switch (which) {
+ case 'mode':
+ toEdit = this.state.access;
+ break;
+
+ case 'want':
+ toEdit = this.state.modeWant;
+ toCompare = this.state.modeGiven;
+
+ if (this.state.owner) {
+ toSkip = 'O';
+ } else {
+ toSkip = tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().AccessMode.encode(tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().AccessMode.diff('ASDO', this.state.modeGiven));
+
+ if (this.state.channel) {
+ toSkip += 'W';
+ }
+ }
+
+ titleEdit = formatMessage(messages.requested);
+ titleCompare = formatMessage(messages.granted);
+ break;
+
+ case 'given':
+ toEdit = this.state.modeGiven2;
+ toCompare = this.state.modeWant2;
+ toSkip = this.state.groupTopic ? this.state.owner ? '' : 'O' : 'ASDO';
+ titleEdit = formatMessage(messages.granted);
+ titleCompare = formatMessage(messages.requested);
+ break;
+
+ case 'auth':
+ toEdit = this.state.auth;
+ toSkip = 'O';
+ break;
+
+ case 'anon':
+ toEdit = this.state.anon;
+ toSkip = 'O';
+ break;
+
+ case 'user':
+ {
+ const topic = this.props.tinode.getTopic(this.props.topic);
+
+ if (!topic) {
+ return;
+ }
+
+ const user = topic.subscriber(uid);
+
+ if (!user || !user.acs) {
+ return;
+ }
+
+ toEdit = user.acs.getGiven();
+ toCompare = user.acs.getWant();
+ toSkip = this.state.owner ? '' : 'O';
+ titleEdit = formatMessage(messages.granted);
+ titleCompare = formatMessage(messages.requested);
+
+ if (user.public) {
+ userTitle = user.public.fn;
+ userAvatar = user.public.photo;
+ }
+
+ break;
+ }
+
+ default:
+ console.log("Unknown permission editing mode '" + which + "'");
+ break;
+ }
+
+ this.setState({
+ showPermissionEditorFor: which,
+ userPermissionsEdited: uid,
+ userPermissionsTitle: userTitle,
+ userPermissionsAvatar: userAvatar,
+ editedPermissions: toEdit,
+ immutablePermissions: toCompare,
+ editedPermissionsTitle: titleEdit,
+ immutablePermissionsTitle: titleCompare,
+ editedPermissionsSkipped: toSkip
+ });
+ }
+
+ handleHidePermissionsEditor() {
+ this.setState({
+ showPermissionEditorFor: undefined
+ });
+ }
+
+ handleShowAddMembers(e) {
+ e.preventDefault();
+ this.props.onInitFind();
+ this.setState({
+ showMemberPanel: true
+ });
+ }
+
+ handleHideAddMembers() {
+ this.setState({
+ showMemberPanel: false
+ });
+ }
+
+ handleMemberUpdateRequest(members, added, removed) {
+ this.props.onMemberUpdateRequest(this.props.topic, added, removed);
+ this.setState({
+ showMemberPanel: false
+ });
+ }
+
+ handleDeleteMessages(e) {
+ e.preventDefault();
+ const {
+ formatMessage
+ } = this.props.intl;
+ this.props.onShowAlert(formatMessage(this.state.deleter ? messages.delete_messages : messages.clear_messages), formatMessage(this.state.deleter ? messages.delete_messages_warning : messages.clear_messages_warning), () => {
+ this.props.onDeleteMessages(this.props.topic);
+ }, null, true, null);
+ }
+
+ handleLeave(e) {
+ e.preventDefault();
+ const {
+ formatMessage
+ } = this.props.intl;
+ this.props.onShowAlert(formatMessage(messages.leave_chat), formatMessage(messages.leave_chat_warning), () => {
+ this.props.onLeaveTopic(this.props.topic);
+ }, null, true, null);
+ }
+
+ handleBlock(e) {
+ e.preventDefault();
+ const {
+ formatMessage
+ } = this.props.intl;
+ this.props.onShowAlert(formatMessage(messages.block_contact), formatMessage(messages.block_contact_warning), () => {
+ this.props.onBlockTopic(this.props.topic);
+ }, null, true, null);
+ }
+
+ handleReport(e) {
+ e.preventDefault();
+ const {
+ formatMessage
+ } = this.props.intl;
+ this.props.onShowAlert(formatMessage(messages.report_chat), formatMessage(messages.report_chat_warning), () => {
+ this.props.onReportTopic(this.props.topic);
+ }, null, true, null);
+ }
+
+ handleMemberSelected(uid) {
+ this.setState({
+ selectedContact: uid
+ });
+ }
+
+ handleMoreInfo(open) {
+ this.setState({
+ moreInfoExpanded: open
+ });
+ }
+
+ handleTagsUpdated(tags) {
+ if (!(0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_15__.arrayEqual)(this.state.tags.slice(0), tags.slice(0))) {
+ this.props.onTopicTagsUpdate(this.props.topic, tags);
+ }
+ }
+
+ handleContextMenu(params) {
+ const {
+ formatMessage
+ } = this.props.intl;
+ const instance = this;
+ const topic = this.props.tinode.getTopic(this.props.topic);
+
+ if (!topic) {
+ return;
+ }
+
+ const user = topic.subscriber(params.topicName);
+
+ if (!user || !user.acs) {
+ return;
+ }
+
+ const menuItems = [{
+ title: formatMessage(messages.edit_permissions),
+ handler: function () {
+ instance.handleLaunchPermissionsEditor('user', params.topicName);
+ }
+ }, 'member_delete', user.acs.isMuted() ? 'member_unmute' : 'member_mute', user.acs.isJoiner() ? 'member_block' : 'member_unblock'];
+ this.props.showContextMenu({
+ topicName: this.props.topic,
+ x: params.x,
+ y: params.y,
+ user: params.topicName
+ }, menuItems);
+ }
+
+ render() {
+ const {
+ formatMessage
+ } = this.props.intl;
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "info-view"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "caption-panel",
+ id: "info-caption-panel"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-title",
+ id: "info-title"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "title_info",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Info"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_menu_cancel_jsx__WEBPACK_IMPORTED_MODULE_9__.default, {
+ onCancel: this.props.onCancel
+ }))), this.props.displayMobile ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_error_panel_jsx__WEBPACK_IMPORTED_MODULE_6__.default, {
+ level: this.props.errorLevel,
+ text: this.props.errorText,
+ onClearError: this.props.onError
+ }) : null, this.state.showMemberPanel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_group_manager_jsx__WEBPACK_IMPORTED_MODULE_7__.default, {
+ members: this.state.contactList,
+ requiredMember: this.props.myUserId,
+ keepInitialMembers: !this.state.admin && !this.state.owner,
+ myUserId: this.props.myUserId,
+ contacts: this.props.searchableContacts,
+ onCancel: this.handleHideAddMembers,
+ onSubmit: this.handleMemberUpdateRequest
+ }) : this.state.showPermissionEditorFor ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_permissions_editor_jsx__WEBPACK_IMPORTED_MODULE_11__.default, {
+ mode: this.state.editedPermissions,
+ compare: this.state.immutablePermissions,
+ skip: this.state.editedPermissionsSkipped,
+ modeTitle: this.state.editedPermissionsTitle,
+ compareTitle: this.state.immutablePermissionsTitle,
+ userTitle: this.state.userPermissionsTitle,
+ item: this.state.userPermissionsEdited,
+ userAvatar: this.state.userPermissionsAvatar,
+ onSubmit: this.handlePermissionsChanged,
+ onCancel: this.handleHidePermissionsEditor
+ }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "info-view-content",
+ className: "scrollable-panel"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-column"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_topic_name",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Name"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_8__.default, {
+ placeholder: this.state.groupTopic ? "Group name" : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", null, "Unknown"),
+ readOnly: !this.state.owner,
+ value: this.state.fullName,
+ required: true,
+ onFinished: this.handleFullNameUpdate
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_private",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Private comment"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "private_editing_placeholder",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Visible to you only"
+ }]
+ }, private_placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_8__.default, {
+ placeholder: private_placeholder,
+ value: this.state.private,
+ onFinished: this.handlePrivateUpdate
+ })))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_3__.default, {
+ avatar: this.state.avatar,
+ readOnly: !this.state.owner,
+ uid: this.props.topic,
+ title: this.state.fullName,
+ onImageChanged: this.handleImageChanged,
+ onError: this.props.onError
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "hr"
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-column"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_muting_topic",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Muted:"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_4__.default, {
+ name: "P",
+ checked: this.state.muted,
+ onChange: this.handleMuted
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "action_more",
+ defaultMessage: [{
+ "type": 0,
+ "value": "More"
+ }]
+ }, more => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_more_button_jsx__WEBPACK_IMPORTED_MODULE_10__.default, {
+ title: more,
+ open: this.state.moreInfoExpanded,
+ onToggle: this.handleMoreInfo
+ })), this.state.moreInfoExpanded ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-column"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_user_id",
+ defaultMessage: [{
+ "type": 0,
+ "value": "ID:"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tt", null, this.state.address)), this.state.groupTopic ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_your_permissions",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Your permissions:"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tt", {
+ className: "clickable",
+ onClick: this.handleLaunchPermissionsEditor.bind(this, 'want')
+ }, this.state.access)) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_permissions",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Permissions:"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "quoted"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_you",
+ defaultMessage: [{
+ "type": 0,
+ "value": "You:"
+ }]
+ }), " \xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tt", {
+ className: "clickable",
+ onClick: this.handleLaunchPermissionsEditor.bind(this, 'want')
+ }, this.state.access)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, this.state.fullName ? this.state.fullName : formatMessage(messages.other_user), ": \xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tt", {
+ className: "clickable",
+ onClick: this.handleLaunchPermissionsEditor.bind(this, 'given')
+ }, this.state.modeGiven2)))), this.state.sharer && (this.state.auth || this.state.anon) ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_default_access",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Default access mode:"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "quoted"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, "Auth: ", this.state.admin ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tt", {
+ className: "clickable",
+ onClick: this.handleLaunchPermissionsEditor.bind(this, 'auth')
+ }, this.state.auth) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tt", null, this.state.auth)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, "Anon: ", this.state.admin ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tt", {
+ className: "clickable",
+ onClick: this.handleLaunchPermissionsEditor.bind(this, 'anon')
+ }, this.state.anon) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tt", null, this.state.anon)))) : null) : null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "hr"
+ }), this.state.owner ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "title_tag_manager",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Tags (user discovery)"
+ }]
+ }, tags => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_tag_manager_jsx__WEBPACK_IMPORTED_MODULE_12__.default, {
+ title: tags,
+ tags: this.state.tags,
+ activated: false,
+ tinode: this.props.tinode,
+ onSubmit: this.handleTagsUpdated
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "hr"
+ })) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-column"
+ }, !this.state.channel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ className: "flat-button",
+ onClick: this.handleDeleteMessages
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "delete_outline"), " \xA0", formatMessage(this.state.deleter ? messages.delete_messages : messages.clear_messages)) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ className: "red flat-button",
+ onClick: this.handleLeave
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "exit_to_app"), " \xA0", formatMessage(messages.leave_chat)), !this.state.groupTopic ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ className: "red flat-button",
+ onClick: this.handleBlock
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "block"), " \xA0", formatMessage(messages.block_contact)) : null, !this.state.owner ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ className: "red flat-button",
+ onClick: this.handleReport
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "report"), " \xA0", formatMessage(messages.report_chat)) : null), this.state.groupTopic && this.state.sharer ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "hr"
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-column"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_group_members",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Group members:"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ className: "flat-button",
+ onClick: this.handleShowAddMembers
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "person_add"), " \xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_add_members",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Add members"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "group_has_no_members",
+ defaultMessage: [{
+ "type": 0,
+ "value": "No members"
+ }]
+ }, no_members => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_5__.default, {
+ contacts: this.state.contactList,
+ myUserId: this.props.myUserId,
+ emptyListMessage: no_members,
+ topicSelected: this.state.selectedContact,
+ showOnline: false,
+ showUnread: false,
+ showMode: true,
+ noScroll: true,
+ onTopicSelected: this.handleMemberSelected,
+ showContextMenu: this.state.admin ? this.handleContextMenu : false
+ })))) : null));
+ }
+
+}
+
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(InfoView));
+
+/***/ }),
+
+/***/ "./src/views/login-view.jsx":
+/*!**********************************!*\
+ !*** ./src/views/login-view.jsx ***!
+ \**********************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ LoginView; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/checkbox.jsx */ "./src/widgets/checkbox.jsx");
+/* harmony import */ var _widgets_visible_password_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/visible-password.jsx */ "./src/widgets/visible-password.jsx");
+/* harmony import */ var _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/local-storage.js */ "./src/lib/local-storage.js");
+
+
+
+
+
+class LoginView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ login: props.login,
+ password: '',
+ hostName: props.serverAddress,
+ saveToken: _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_4__.default.getObject('keep-logged-in')
+ };
+ this.handleLoginChange = this.handleLoginChange.bind(this);
+ this.handlePasswordChange = this.handlePasswordChange.bind(this);
+ this.handleToggleSaveToken = this.handleToggleSaveToken.bind(this);
+ this.handleSubmit = this.handleSubmit.bind(this);
+ }
+
+ handleLoginChange(e) {
+ this.setState({
+ login: e.target.value
+ });
+ }
+
+ handlePasswordChange(e) {
+ this.setState({
+ password: e.target.value
+ });
+ }
+
+ handleToggleSaveToken() {
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_4__.default.setObject('keep-logged-in', !this.state.saveToken);
+ this.setState({
+ saveToken: !this.state.saveToken
+ });
+ }
+
+ handleSubmit(e) {
+ e.preventDefault();
+ this.props.onLogin(this.state.login.trim(), this.state.password.trim());
+ }
+
+ render() {
+ var submitClasses = 'blue';
+
+ if (this.props.disabled) {
+ submitClasses += ' disabled';
+ }
+
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("form", {
+ id: "login-form",
+ onSubmit: this.handleSubmit
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "login_prompt",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Login"
+ }]
+ }, login_prompt => react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
+ type: "text",
+ id: "inputLogin",
+ placeholder: login_prompt,
+ autoComplete: "username",
+ autoCorrect: "off",
+ autoCapitalize: "none",
+ value: this.state.login,
+ onChange: this.handleLoginChange,
+ required: true,
+ autoFocus: true
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "password_prompt",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Password"
+ }]
+ }, password_prompt => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_visible_password_jsx__WEBPACK_IMPORTED_MODULE_3__.default, {
+ type: "password",
+ id: "inputPassword",
+ placeholder: password_prompt,
+ autoComplete: "current-password",
+ value: this.state.password,
+ onChange: this.handlePasswordChange,
+ required: true
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ id: "save-token",
+ name: "save-token",
+ checked: this.state.saveToken,
+ onChange: this.handleToggleSaveToken
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ htmlFor: "save-token"
+ }, "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "stay_logged_in",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Stay logged in"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#reset"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "forgot_password_link",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Forgot password?"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "dialog-buttons"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
+ className: submitClasses,
+ type: "submit"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_sign_in",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Sign in"
+ }]
+ }))));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/views/logo-view.jsx":
+/*!*********************************!*\
+ !*** ./src/views/logo-view.jsx ***!
+ \*********************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ LogoView; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+
+
+
+
+class LogoView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ const version = _config_js__WEBPACK_IMPORTED_MODULE_3__.APP_NAME + ' (' + tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().getLibrary() + ')';
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "dummy-view"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "https://github.com/tinode/chat/"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("img", {
+ id: "logo",
+ alt: "logo",
+ src: "img/logo.svg"
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h2", null, "Tinode Web")), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_client",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Client:"
+ }]
+ }), " ", version), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_server",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Server:"
+ }]
+ }), " ", this.props.serverVersion, " (", this.props.serverAddress, ")")));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/views/messages-view.jsx":
+/*!*************************************!*\
+ !*** ./src/views/messages-view.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _widgets_chat_message_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/chat-message.jsx */ "./src/widgets/chat-message.jsx");
+/* harmony import */ var _widgets_doc_preview_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/doc-preview.jsx */ "./src/widgets/doc-preview.jsx");
+/* harmony import */ var _widgets_error_panel_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../widgets/error-panel.jsx */ "./src/widgets/error-panel.jsx");
+/* harmony import */ var _widgets_group_subs_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../widgets/group-subs.jsx */ "./src/widgets/group-subs.jsx");
+/* harmony import */ var _widgets_image_preview_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../widgets/image-preview.jsx */ "./src/widgets/image-preview.jsx");
+/* harmony import */ var _widgets_invitation_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../widgets/invitation.jsx */ "./src/widgets/invitation.jsx");
+/* harmony import */ var _widgets_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../widgets/letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
+/* harmony import */ var _widgets_load_spinner_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../widgets/load-spinner.jsx */ "./src/widgets/load-spinner.jsx");
+/* harmony import */ var _logo_view_jsx__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./logo-view.jsx */ "./src/views/logo-view.jsx");
+/* harmony import */ var _widgets_send_message_jsx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../widgets/send-message.jsx */ "./src/widgets/send-message.jsx");
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
+/* harmony import */ var _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../lib/navigation.js */ "./src/lib/navigation.js");
+/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
+
+
+
+const Drafty = (tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().Drafty);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+const NOTIFICATION_EXEC_INTERVAL = 300;
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ online_now: {
+ "id": "online_now",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "online now"
+ }]
+ },
+ last_seen: {
+ "id": "last_seen_timestamp",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Last seen"
+ }]
+ },
+ not_found: {
+ "id": "title_not_found",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Not found"
+ }]
+ },
+ channel: {
+ "id": "channel",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "channel"
+ }]
+ },
+ file_attachment_too_large: {
+ "id": "file_attachment_too_large",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "The file size "
+ }, {
+ "type": 1,
+ "value": "size"
+ }, {
+ "type": 0,
+ "value": " exceeds the "
+ }, {
+ "type": 1,
+ "value": "limit"
+ }, {
+ "type": 0,
+ "value": " limit."
+ }]
+ }
+});
+
+function isUnconfirmed(acs) {
+ if (acs) {
+ const ex = acs.getExcessive() || '';
+ return acs.isJoiner('given') && (ex.includes('R') || ex.includes('W'));
+ }
+
+ return false;
+}
+
+function isPeerRestricted(acs) {
+ if (acs) {
+ const ms = acs.getMissing() || '';
+ return acs.isJoiner('want') && (ms.includes('R') || ms.includes('W'));
+ }
+
+ return false;
+}
+
+class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.state = MessagesView.getDerivedStateFromProps(props, {});
+ this.leave = this.leave.bind(this);
+ this.sendImageAttachment = this.sendImageAttachment.bind(this);
+ this.sendFileAttachment = this.sendFileAttachment.bind(this);
+ this.sendKeyPress = this.sendKeyPress.bind(this);
+ this.handleScrollReference = this.handleScrollReference.bind(this);
+ this.handleScrollEvent = this.handleScrollEvent.bind(this);
+ this.handleDescChange = this.handleDescChange.bind(this);
+ this.handleSubsUpdated = this.handleSubsUpdated.bind(this);
+ this.handleNewMessage = this.handleNewMessage.bind(this);
+ this.handleAllMessagesReceived = this.handleAllMessagesReceived.bind(this);
+ this.handleInfoReceipt = this.handleInfoReceipt.bind(this);
+ this.handleImagePostview = this.handleImagePostview.bind(this);
+ this.handleClosePreview = this.handleClosePreview.bind(this);
+ this.handleFormResponse = this.handleFormResponse.bind(this);
+ this.handleContextClick = this.handleContextClick.bind(this);
+ this.handleShowContextMenuMessage = this.handleShowContextMenuMessage.bind(this);
+ this.handleNewChatAcceptance = this.handleNewChatAcceptance.bind(this);
+ this.handleEnablePeer = this.handleEnablePeer.bind(this);
+ this.handleAttachFile = this.handleAttachFile.bind(this);
+ this.handleAttachImage = this.handleAttachImage.bind(this);
+ this.handleCancelUpload = this.handleCancelUpload.bind(this);
+ this.postReadNotification = this.postReadNotification.bind(this);
+ this.clearNotificationQueue = this.clearNotificationQueue.bind(this);
+ this.readNotificationQueue = [];
+ this.readNotificationTimer = null;
+ }
+
+ componentDidMount() {
+ if (this.messagesScroller) {
+ this.messagesScroller.addEventListener('scroll', this.handleScrollEvent);
+ }
+ }
+
+ componentWillUnmount() {
+ if (this.messagesScroller) {
+ this.messagesScroller.removeEventListener('scroll', this.handleScrollEvent);
+ }
+
+ this.clearNotificationQueue();
+ }
+
+ componentDidUpdate(prevProps, prevState) {
+ if (this.messagesScroller) {
+ if (prevState.topic != this.state.topic || prevState.messages.length != this.state.messages.length) {
+ this.messagesScroller.scrollTop = this.messagesScroller.scrollHeight - this.state.scrollPosition;
+ } else if (prevProps.viewportHeight > this.props.viewportHeight) {
+ this.messagesScroller.scrollTop += prevProps.viewportHeight - this.props.viewportHeight;
+ }
+ }
+
+ const topic = this.props.tinode.getTopic(this.state.topic);
+
+ if (this.state.topic != prevState.topic) {
+ if (prevState.topic && !tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().isNewGroupTopicName(prevState.topic)) {
+ this.leave(prevState.topic);
+ }
+
+ if (topic) {
+ topic.onData = this.handleNewMessage;
+ topic.onAllMessagesReceived = this.handleAllMessagesReceived;
+ topic.onInfo = this.handleInfoReceipt;
+ topic.onMetaDesc = this.handleDescChange;
+ topic.onSubsUpdated = this.handleSubsUpdated;
+ topic.onPres = this.handleSubsUpdated;
+ }
+ }
+
+ if (!this.props.applicationVisible) {
+ this.clearNotificationQueue();
+ } else {
+ this.postReadNotification(0);
+ }
+
+ if (topic && !topic.isSubscribed() && this.props.ready && (this.state.topic != prevState.topic || !prevProps.ready)) {
+ const newTopic = this.props.newTopicParams && this.props.newTopicParams._topicName == this.props.topic;
+ let getQuery = topic.startMetaQuery().withLaterDesc();
+
+ if (this.state.isSharer || newTopic && !topic.isChannel()) {
+ getQuery = getQuery.withLaterSub();
+ }
+
+ if (this.state.isReader || newTopic) {
+ getQuery = getQuery.withLaterData(_config_js__WEBPACK_IMPORTED_MODULE_13__.MESSAGES_PAGE);
+
+ if (this.state.isReader) {
+ getQuery = getQuery.withLaterDel();
+ }
+
+ this.setState({
+ fetchingMessages: true
+ });
+ }
+
+ const setQuery = newTopic ? this.props.newTopicParams : undefined;
+ topic.subscribe(getQuery.build(), setQuery).then(ctrl => {
+ if (ctrl.code == 303) {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.setUrlTopic('', ctrl.params.topic));
+ return;
+ }
+
+ if (this.state.topic != ctrl.topic) {
+ this.setState({
+ topic: ctrl.topic
+ });
+ }
+
+ this.props.onNewTopicCreated(this.props.topic, ctrl.topic);
+ topic.queuedMessages(pub => {
+ if (!pub._sending && topic.isSubscribed()) {
+ topic.publishMessage(pub);
+ }
+ });
+ }).catch(err => {
+ console.log("Failed subscription to", this.state.topic);
+ this.props.onError(err.message, 'err');
+ const blankState = MessagesView.getDerivedStateFromProps({}, {});
+ blankState.title = this.props.intl.formatMessage(messages.not_found);
+ this.setState(blankState);
+ });
+ }
+ }
+
+ static getDerivedStateFromProps(nextProps, prevState) {
+ let nextState = {};
+
+ if (!nextProps.topic) {
+ nextState = {
+ messages: [],
+ onlineSubs: [],
+ topic: null,
+ title: '',
+ avatar: null,
+ docPreview: null,
+ imagePreview: null,
+ imagePostview: null,
+ typingIndicator: false,
+ scrollPosition: 0,
+ fetchingMessages: false,
+ peerMessagingDisabled: false,
+ channel: false
+ };
+ } else if (nextProps.topic != prevState.topic) {
+ const topic = nextProps.tinode.getTopic(nextProps.topic);
+ nextState = {
+ topic: nextProps.topic,
+ docPreview: null,
+ imagePreview: null,
+ imagePostview: null,
+ typingIndicator: false,
+ scrollPosition: 0,
+ fetchingMessages: false
+ };
+
+ if (topic) {
+ const msgs = [];
+ const subs = [];
+
+ if (nextProps.connected) {
+ topic.subscribers(sub => {
+ if (sub.online && sub.user != nextProps.myUserId) {
+ subs.push(sub);
+ }
+ });
+ }
+
+ topic.messages(function (msg) {
+ if (!msg.deleted) {
+ msgs.push(msg);
+ }
+ });
+ Object.assign(nextState, {
+ messages: msgs,
+ onlineSubs: subs
+ });
+
+ if (topic.public) {
+ Object.assign(nextState, {
+ title: topic.public.fn,
+ avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_14__.makeImageUrl)(topic.public.photo)
+ });
+ } else {
+ Object.assign(nextState, {
+ title: '',
+ avatar: null
+ });
+ }
+
+ const peer = topic.p2pPeerDesc();
+
+ if (peer) {
+ Object.assign(nextState, {
+ peerMessagingDisabled: isPeerRestricted(peer.acs)
+ });
+ } else if (prevState.peerMessagingDisabled) {
+ Object.assign(nextState, {
+ peerMessagingDisabled: false
+ });
+ }
+
+ Object.assign(nextState, {
+ channel: topic.isChannel()
+ });
+ } else {
+ Object.assign(nextState, {
+ messages: [],
+ onlineSubs: [],
+ title: '',
+ avatar: null,
+ peerMessagingDisabled: false,
+ channel: false
+ });
+ }
+ }
+
+ if (nextProps.acs) {
+ if (nextProps.acs.isWriter() != prevState.isWriter) {
+ nextState.isWriter = !prevState.isWriter;
+ }
+
+ if (nextProps.acs.isReader() != prevState.isReader) {
+ nextState.isReader = !prevState.isReader;
+ }
+
+ if (!nextProps.acs.isReader('given') != prevState.readingBlocked) {
+ nextState.readingBlocked = !prevState.readingBlocked;
+ }
+
+ if (nextProps.acs.isSharer() != prevState.isSharer) {
+ nextState.isSharer = !prevState.isSharer;
+ }
+ } else {
+ if (prevState.isWriter) {
+ nextState.isWriter = false;
+ }
+
+ if (prevState.isReader) {
+ nextState.isReader = false;
+ }
+
+ if (!prevState.readingBlocked) {
+ prevState.readingBlocked = true;
+ }
+
+ if (prevState.isSharer) {
+ nextState.isSharer = false;
+ }
+ }
+
+ if (isUnconfirmed(nextProps.acs) == !prevState.unconformed) {
+ nextState.unconfirmed = !prevState.unconformed;
+ }
+
+ if (!nextProps.connected && prevState.onlineSubs && prevState.onlineSubs.length > 0) {
+ nextState.onlineSubs = [];
+ }
+
+ return nextState;
+ }
+
+ leave(oldTopicName) {
+ if (!oldTopicName) {
+ return;
+ }
+
+ let oldTopic = this.props.tinode.getTopic(oldTopicName);
+
+ if (oldTopic && oldTopic.isSubscribed()) {
+ oldTopic.leave(false).catch(() => {}).finally(() => {
+ this.setState({
+ fetchingMessages: false
+ });
+ oldTopic.onData = undefined;
+ oldTopic.onAllMessagesReceived = undefined;
+ oldTopic.onInfo = undefined;
+ oldTopic.onMetaDesc = undefined;
+ oldTopic.onSubsUpdated = undefined;
+ oldTopic.onPres = undefined;
+ });
+ }
+ }
+
+ handleScrollReference(node) {
+ if (node) {
+ node.addEventListener('scroll', this.handleScrollEvent);
+ this.messagesScroller = node;
+ this.messagesScroller.scrollTop = this.messagesScroller.scrollHeight - this.state.scrollPosition;
+ }
+ }
+
+ handleScrollEvent(event) {
+ this.setState({
+ scrollPosition: event.target.scrollHeight - event.target.scrollTop
+ });
+
+ if (event.target.scrollTop <= 0) {
+ this.setState((prevState, props) => {
+ const newState = {};
+
+ if (!prevState.fetchingMessages) {
+ const topic = this.props.tinode.getTopic(this.state.topic);
+
+ if (topic && topic.isSubscribed() && topic.msgHasMoreMessages()) {
+ newState.fetchingMessages = true;
+ topic.getMessagesPage(_config_js__WEBPACK_IMPORTED_MODULE_13__.MESSAGES_PAGE).catch(err => {
+ this.setState({
+ fetchingMessages: false
+ });
+ this.props.onError(err.message, 'err');
+ });
+ }
+ }
+
+ return newState;
+ });
+ }
+ }
+
+ handleDescChange(desc) {
+ if (desc.public) {
+ this.setState({
+ title: desc.public.fn,
+ avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_14__.makeImageUrl)(desc.public.photo)
+ });
+ } else {
+ this.setState({
+ title: '',
+ avatar: null
+ });
+ }
+
+ if (desc.acs) {
+ this.setState({
+ isWriter: desc.acs.isWriter(),
+ isReader: desc.acs.isReader(),
+ readingBlocked: !desc.acs.isReader('given'),
+ unconfirmed: isUnconfirmed(desc.acs)
+ });
+ }
+ }
+
+ postReadNotification(seq) {
+ if (!this.props.applicationVisible) {
+ return;
+ }
+
+ if (!this.readNotificationTimer) {
+ this.readNotificationTimer = setInterval(() => {
+ if (this.readNotificationQueue.length == 0) {
+ clearInterval(this.readNotificationTimer);
+ this.readNotificationTimer = null;
+ return;
+ }
+
+ let seq = -1;
+
+ while (this.readNotificationQueue.length > 0) {
+ const n = this.readNotificationQueue[0];
+
+ if (n.topicName != this.state.topic) {
+ this.readNotificationQueue.shift();
+ continue;
+ }
+
+ const now = new Date();
+
+ if (n.sendAt <= now) {
+ this.readNotificationQueue.shift();
+ seq = Math.max(seq, n.seq);
+ } else {
+ break;
+ }
+ }
+
+ if (seq >= 0) {
+ const topic = this.props.tinode.getTopic(this.state.topic);
+
+ if (topic) {
+ topic.noteRead(seq);
+ }
+ }
+ }, NOTIFICATION_EXEC_INTERVAL);
+ }
+
+ const now = new Date();
+ this.readNotificationQueue.push({
+ topicName: this.state.topic,
+ seq: seq,
+ sendAt: now.setMilliseconds(now.getMilliseconds() + _config_js__WEBPACK_IMPORTED_MODULE_13__.READ_DELAY)
+ });
+ }
+
+ clearNotificationQueue() {
+ this.readNotificationQueue = [];
+
+ if (this.readNotificationTimer) {
+ clearInterval(this.readNotificationTimer);
+ this.readNotificationTimer = null;
+ }
+ }
+
+ handleSubsUpdated() {
+ if (this.state.topic) {
+ const subs = [];
+ const topic = this.props.tinode.getTopic(this.state.topic);
+ topic.subscribers(sub => {
+ if (sub.online && sub.user != this.props.myUserId) {
+ subs.push(sub);
+ }
+ });
+ const newState = {
+ onlineSubs: subs
+ };
+ const peer = topic.p2pPeerDesc();
+
+ if (peer) {
+ Object.assign(newState, {
+ peerMessagingDisabled: isPeerRestricted(peer.acs)
+ });
+ } else if (this.state.peerMessagingDisabled) {
+ Object.assign(newState, {
+ peerMessagingDisabled: false
+ });
+ }
+
+ this.setState(newState);
+ }
+ }
+
+ handleNewMessage(msg) {
+ const topic = this.props.tinode.getTopic(this.state.topic);
+ const newState = {
+ messages: []
+ };
+ topic.messages(m => {
+ if (!m.deleted) {
+ newState.messages.push(m);
+ }
+ });
+
+ if (msg && !msg.deleted) {
+ if (topic.isNewMessage(msg.seq)) {
+ newState.scrollPosition = 0;
+ }
+
+ const status = topic.msgStatus(msg);
+
+ if (status >= (tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().MESSAGE_STATUS_SENT) && msg.from != this.props.myUserId) {
+ this.postReadNotification(msg.seq);
+ }
+
+ this.props.onData(msg);
+ }
+
+ this.setState(newState);
+ }
+
+ handleAllMessagesReceived(count) {
+ this.setState({
+ fetchingMessages: false
+ });
+
+ if (count > 0) {
+ this.postReadNotification(0);
+ }
+ }
+
+ handleInfoReceipt(info) {
+ switch (info.what) {
+ case 'kp':
+ {
+ clearTimeout(this.keyPressTimer);
+ var instance = this;
+ this.keyPressTimer = setTimeout(function () {
+ instance.setState({
+ typingIndicator: false
+ });
+ }, _config_js__WEBPACK_IMPORTED_MODULE_13__.KEYPRESS_DELAY + 1000);
+
+ if (!this.state.typingIndicator) {
+ this.setState({
+ typingIndicator: true
+ });
+ }
+
+ break;
+ }
+
+ case 'read':
+ case 'recv':
+ this.forceUpdate();
+ break;
+
+ default:
+ console.log("Other change in topic: ", info.what);
+ }
+ }
+
+ handleImagePostview(content) {
+ this.setState({
+ imagePostview: content
+ });
+ }
+
+ handleClosePreview() {
+ if (this.state.imagePreview && this.state.imagePreview.url) {
+ URL.revokeObjectURL(this.state.imagePreview.url);
+ }
+
+ this.setState({
+ imagePostview: null,
+ imagePreview: null,
+ docPreview: null
+ });
+ }
+
+ handleFormResponse(action, text, data) {
+ if (action == 'pub') {
+ this.props.sendMessage(Drafty.attachJSON(Drafty.parse(text), data));
+ } else if (action == 'url') {
+ const url = new URL(data.ref);
+ const params = url.searchParams;
+
+ for (let key in data.resp) {
+ if (data.resp.hasOwnProperty(key)) {
+ params.set(key, data.resp[key]);
+ }
+ }
+
+ ['name', 'seq'].map(function (key) {
+ if (data[key]) {
+ params.set(key, data[key]);
+ }
+ });
+ params.set('uid', this.props.myUserId);
+ url.search = params;
+ window.open(url, '_blank');
+ } else {
+ console.log("Unknown action in form", action);
+ }
+ }
+
+ handleContextClick(e) {
+ e.preventDefault();
+ e.stopPropagation();
+ this.props.showContextMenu({
+ topicName: this.state.topic,
+ y: e.pageY,
+ x: e.pageX
+ });
+ }
+
+ handleShowContextMenuMessage(params, messageSpecificMenuItems) {
+ params.topicName = this.state.topic;
+ const menuItems = messageSpecificMenuItems || [];
+ const topic = this.props.tinode.getTopic(params.topicName);
+
+ if (topic) {
+ if (!topic.isChannel()) {
+ menuItems.push('message_delete');
+ }
+
+ const acs = topic.getAccessMode();
+
+ if (acs && acs.isDeleter()) {
+ menuItems.push('message_delete_hard');
+ }
+ }
+
+ this.props.showContextMenu(params, menuItems);
+ }
+
+ handleNewChatAcceptance(action) {
+ this.props.onNewChat(this.state.topic, action);
+ }
+
+ handleEnablePeer(e) {
+ e.preventDefault();
+ this.props.onChangePermissions(this.state.topic, _config_js__WEBPACK_IMPORTED_MODULE_13__.DEFAULT_P2P_ACCESS_MODE, this.state.topic);
+ }
+
+ sendKeyPress() {
+ const topic = this.props.tinode.getTopic(this.state.topic);
+
+ if (topic.isSubscribed()) {
+ topic.noteKeyPress();
+ }
+ }
+
+ sendFileAttachment(file) {
+ const maxInbandAttachmentSize = this.props.tinode.getServerLimit('maxMessageSize', _config_js__WEBPACK_IMPORTED_MODULE_13__.MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024 | 0;
+
+ if (file.size > maxInbandAttachmentSize) {
+ const uploader = this.props.tinode.getLargeFileHelper();
+
+ if (!uploader) {
+ this.props.onError(this.props.intl.formatMessage(messages.cannot_initiate_upload));
+ return;
+ }
+
+ const uploadCompletionPromise = uploader.upload(file);
+ const msg = Drafty.attachFile(null, {
+ mime: file.type,
+ filename: file.name,
+ size: file.size,
+ urlPromise: uploadCompletionPromise
+ });
+ this.props.sendMessage(msg, uploadCompletionPromise, uploader);
+ } else {
+ (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_14__.fileToBase64)(file, (mime, bits, fname) => {
+ this.props.sendMessage(Drafty.attachFile(null, {
+ mime: mime,
+ data: bits,
+ filename: fname
+ }));
+ }, this.props.onError);
+ }
+ }
+
+ handleAttachFile(file) {
+ const maxExternAttachmentSize = this.props.tinode.getServerLimit('maxFileUploadSize', _config_js__WEBPACK_IMPORTED_MODULE_13__.MAX_EXTERN_ATTACHMENT_SIZE);
+
+ if (file.size > maxExternAttachmentSize) {
+ this.props.onError(this.props.intl.formatMessage(messages.file_attachment_too_large, {
+ size: (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_16__.bytesToHumanSize)(file.size),
+ limit: (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_16__.bytesToHumanSize)(maxExternAttachmentSize)
+ }), 'err');
+ } else {
+ this.setState({
+ docPreview: {
+ file: file,
+ filename: file.name,
+ size: file.size,
+ type: file.type
+ }
+ });
+ }
+ }
+
+ sendImageAttachment(caption, blob) {
+ const mime = this.state.imagePreview.type;
+ const width = this.state.imagePreview.width;
+ const height = this.state.imagePreview.height;
+ const fname = this.state.imagePreview.filename;
+ const maxInbandAttachmentSize = this.props.tinode.getServerLimit('maxMessageSize', _config_js__WEBPACK_IMPORTED_MODULE_13__.MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024 | 0;
+
+ if (blob.size > maxInbandAttachmentSize) {
+ const uploader = this.props.tinode.getLargeFileHelper();
+
+ if (!uploader) {
+ this.props.onError(this.props.intl.formatMessage(messages.cannot_initiate_upload));
+ return;
+ }
+
+ const uploadCompletionPromise = uploader.upload(blob);
+ (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_14__.imageScaled)(blob, _config_js__WEBPACK_IMPORTED_MODULE_13__.IMAGE_PREVIEW_DIM, _config_js__WEBPACK_IMPORTED_MODULE_13__.IMAGE_PREVIEW_DIM, -1, false, tinyBlob => {
+ (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_14__.blobToBase64)(tinyBlob, (blobMime, tinyBits64) => {
+ let msg = Drafty.insertImage(null, 0, {
+ mime: mime,
+ _tempPreview: tinyBits64,
+ width: width,
+ height: height,
+ filename: fname,
+ size: blob.size,
+ urlPromise: uploadCompletionPromise
+ });
+
+ if (caption) {
+ msg = Drafty.appendLineBreak(msg);
+ msg = Drafty.append(msg, Drafty.init(caption));
+ }
+
+ this.props.sendMessage(msg, uploadCompletionPromise, uploader);
+ });
+ }, err => {
+ this.props.onError(err, 'err');
+ });
+ return;
+ }
+
+ (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_14__.blobToBase64)(blob, (blobMime, bits64) => {
+ let msg = Drafty.insertImage(null, 0, {
+ mime: blobMime,
+ preview: bits64,
+ width: width,
+ height: height,
+ filename: fname,
+ size: blob.size
+ });
+
+ if (caption) {
+ msg = Drafty.appendLineBreak(msg);
+ msg = Drafty.append(msg, Drafty.init(caption));
+ }
+
+ this.props.sendMessage(msg);
+ });
+ }
+
+ handleAttachImage(file) {
+ const maxExternAttachmentSize = this.props.tinode.getServerLimit('maxFileUploadSize', _config_js__WEBPACK_IMPORTED_MODULE_13__.MAX_EXTERN_ATTACHMENT_SIZE);
+ (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_14__.imageScaled)(file, _config_js__WEBPACK_IMPORTED_MODULE_13__.MAX_IMAGE_DIM, _config_js__WEBPACK_IMPORTED_MODULE_13__.MAX_IMAGE_DIM, maxExternAttachmentSize, false, (blob, mime, width, height, fname) => {
+ this.setState({
+ imagePreview: {
+ url: URL.createObjectURL(blob),
+ blob: blob,
+ filename: fname,
+ width: width,
+ height: height,
+ size: blob.size,
+ type: mime
+ }
+ });
+ }, err => {
+ this.props.onError(err, 'err');
+ });
+ }
+
+ handleCancelUpload(seq, uploader) {
+ const found = this.state.messages.find(msg => msg.seq == seq);
+
+ if (found) {
+ found._cancelled = true;
+ }
+
+ uploader.cancel();
+ }
+
+ render() {
+ const {
+ formatMessage
+ } = this.props.intl;
+ let component;
+
+ if (this.props.hideSelf) {
+ component = null;
+ } else if (!this.state.topic) {
+ component = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_logo_view_jsx__WEBPACK_IMPORTED_MODULE_11__.default, {
+ serverVersion: this.props.serverVersion,
+ serverAddress: this.props.serverAddress
+ });
+ } else {
+ let component2;
+
+ if (this.state.imagePreview) {
+ component2 = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_image_preview_jsx__WEBPACK_IMPORTED_MODULE_7__.default, {
+ content: this.state.imagePreview,
+ onClose: this.handleClosePreview,
+ onSendMessage: this.sendImageAttachment
+ });
+ } else if (this.state.imagePostview) {
+ component2 = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_image_preview_jsx__WEBPACK_IMPORTED_MODULE_7__.default, {
+ content: this.state.imagePostview,
+ onClose: this.handleClosePreview
+ });
+ } else if (this.state.docPreview) {
+ component2 = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_doc_preview_jsx__WEBPACK_IMPORTED_MODULE_4__.default, {
+ content: this.state.docPreview,
+ onClose: this.handleClosePreview,
+ onSendMessage: this.sendFileAttachment
+ });
+ } else {
+ const topic = this.props.tinode.getTopic(this.state.topic);
+ const isChannel = topic.isChannel();
+ const groupTopic = topic.getType() == 'grp' && !isChannel;
+ let messageNodes = [];
+ let previousFrom = null;
+ let chatBoxClass = null;
+
+ for (let i = 0; i < this.state.messages.length; i++) {
+ let msg = this.state.messages[i];
+ let nextFrom = null;
+
+ if (i + 1 < this.state.messages.length) {
+ nextFrom = this.state.messages[i + 1].from || 'chan';
+ }
+
+ let sequence = 'single';
+ let thisFrom = msg.from || 'chan';
+
+ if (thisFrom == previousFrom) {
+ if (thisFrom == nextFrom) {
+ sequence = 'middle';
+ } else {
+ sequence = 'last';
+ }
+ } else if (thisFrom == nextFrom) {
+ sequence = 'first';
+ }
+
+ previousFrom = thisFrom;
+ const isReply = !(thisFrom == this.props.myUserId);
+ const deliveryStatus = topic.msgStatus(msg);
+ let userName, userAvatar, userFrom;
+
+ if (groupTopic) {
+ const user = topic.userDesc(thisFrom);
+
+ if (user && user.public) {
+ userName = user.public.fn;
+ userAvatar = (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_14__.makeImageUrl)(user.public.photo);
+ }
+
+ userFrom = thisFrom;
+ chatBoxClass = 'chat-box group';
+ } else {
+ chatBoxClass = 'chat-box';
+ }
+
+ messageNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_chat_message_jsx__WEBPACK_IMPORTED_MODULE_3__.default, {
+ tinode: this.props.tinode,
+ content: msg.content,
+ deleted: msg.hi,
+ mimeType: msg.head ? msg.head.mime : null,
+ timestamp: msg.ts,
+ response: isReply,
+ seq: msg.seq,
+ userFrom: userFrom,
+ userName: userName,
+ userAvatar: userAvatar,
+ sequence: sequence,
+ received: deliveryStatus,
+ uploader: msg._uploader,
+ viewportWidth: this.props.viewportWidth,
+ showContextMenu: this.state.channel ? false : this.handleShowContextMenuMessage,
+ onImagePreview: this.handleImagePostview,
+ onFormResponse: this.handleFormResponse,
+ onError: this.props.onError,
+ onCancelUpload: this.handleCancelUpload,
+ key: msg.seq
+ }));
+ }
+
+ let lastSeen = null;
+
+ if (isChannel) {
+ lastSeen = formatMessage(messages.channel);
+ } else {
+ const cont = this.props.tinode.getMeTopic().getContact(this.state.topic);
+
+ if (cont && tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().isP2PTopicName(cont.topic)) {
+ if (cont.online) {
+ lastSeen = formatMessage(messages.online_now);
+ } else if (cont.seen) {
+ lastSeen = formatMessage(messages.last_seen) + ": " + (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_16__.shortDateFormat)(cont.seen.when, this.props.intl.locale);
+ }
+ }
+ }
+
+ const avatar = this.state.avatar || true;
+ const online = this.props.online ? 'online' + (this.state.typingIndicator ? ' typing' : '') : 'offline';
+ component2 = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "topic-caption-panel",
+ className: "caption-panel"
+ }, this.props.displayMobile ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ id: "hide-message-view",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onHideMessagesView();
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "arrow_back")) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "avatar-box"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_9__.default, {
+ avatar: avatar,
+ topic: this.state.topic,
+ title: this.state.title
+ }), !isChannel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
+ className: online
+ }) : null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "topic-title-group"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "topic-title",
+ className: "panel-title"
+ }, this.state.title || react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "unnamed_topic",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Unnamed"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "topic-last-seen"
+ }, lastSeen)), groupTopic ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_group_subs_jsx__WEBPACK_IMPORTED_MODULE_6__.default, {
+ subscribers: this.state.onlineSubs
+ }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "topic-users"
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: this.handleContextClick
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "more_vert")))), this.props.displayMobile ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_error_panel_jsx__WEBPACK_IMPORTED_MODULE_5__.default, {
+ level: this.props.errorLevel,
+ text: this.props.errorText,
+ onClearError: this.props.onError
+ }) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_load_spinner_jsx__WEBPACK_IMPORTED_MODULE_10__.default, {
+ show: this.state.fetchingMessages
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "messages-container"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "messages-panel",
+ ref: this.handleScrollReference
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", {
+ id: "scroller",
+ className: chatBoxClass
+ }, messageNodes)), !this.state.isReader ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "write-only-background"
+ }, this.state.readingBlocked ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "write-only-note"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "messages_not_readable",
+ defaultMessage: [{
+ "type": 0,
+ "value": "no access to messages"
+ }]
+ })) : null) : null), this.state.peerMessagingDisabled && !this.state.unconfirmed ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "peer-messaging-disabled-note"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons secondary"
+ }, "block"), " ", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "peers_messaging_disabled",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Peer's messaging is disabled."
+ }]
+ }), " ", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: this.handleEnablePeer
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "enable_peers_messaging",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Enable"
+ }]
+ })), ".") : null, this.state.unconfirmed ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_invitation_jsx__WEBPACK_IMPORTED_MODULE_8__.default, {
+ onAction: this.handleNewChatAcceptance
+ }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_send_message_jsx__WEBPACK_IMPORTED_MODULE_12__.default, {
+ disabled: !this.state.isWriter,
+ onSendMessage: this.props.sendMessage,
+ onKeyPress: this.sendKeyPress,
+ onAttachFile: this.handleAttachFile,
+ onAttachImage: this.handleAttachImage,
+ onError: this.props.onError
+ }));
+ }
+
+ component = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "topic-view"
+ }, component2);
+ }
+
+ return component;
+ }
+
+}
+
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(MessagesView));
+
+/***/ }),
+
+/***/ "./src/views/new-topic-view.jsx":
+/*!**************************************!*\
+ !*** ./src/views/new-topic-view.jsx ***!
+ \**************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/contact-list.jsx */ "./src/widgets/contact-list.jsx");
+/* harmony import */ var _widgets_new_topic_by_id_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/new-topic-by-id.jsx */ "./src/widgets/new-topic-by-id.jsx");
+/* harmony import */ var _widgets_new_topic_group_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../widgets/new-topic-group.jsx */ "./src/widgets/new-topic-group.jsx");
+/* harmony import */ var _widgets_search_contacts_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../widgets/search-contacts.jsx */ "./src/widgets/search-contacts.jsx");
+/* harmony import */ var _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/navigation.js */ "./src/lib/navigation.js");
+/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
+
+
+
+
+
+
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ search_for_contacts: {
+ "id": "search_for_contacts",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Use search to find contacts"
+ }]
+ },
+ search_no_results: {
+ "id": "search_no_results",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Search returned no results"
+ }]
+ }
+});
+
+class NewTopicView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ tabSelected: 'p2p',
+ searchQuery: null
+ };
+ this.handleTabClick = this.handleTabClick.bind(this);
+ this.handleSearchContacts = this.handleSearchContacts.bind(this);
+ this.handleContactSelected = this.handleContactSelected.bind(this);
+ this.handleNewGroupSubmit = this.handleNewGroupSubmit.bind(this);
+ this.handleGroupByID = this.handleGroupByID.bind(this);
+ }
+
+ componentDidMount() {
+ this.props.onInitFind();
+ }
+
+ handleTabClick(e) {
+ e.preventDefault();
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__.default.addUrlParam(window.location.hash, 'tab', e.currentTarget.dataset.id));
+ this.setState({
+ tabSelected: e.currentTarget.dataset.id
+ });
+ }
+
+ handleSearchContacts(query) {
+ this.props.onSearchContacts(query);
+ this.setState({
+ searchQuery: tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().isNullValue(query) ? null : query
+ });
+ }
+
+ handleContactSelected(sel) {
+ if (this.state.tabSelected === 'p2p') {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__.default.removeUrlParam(window.location.hash, 'tab'));
+ this.props.onCreateTopic(sel);
+ }
+ }
+
+ handleNewGroupSubmit(name, dataUrl, priv, tags, isChannel) {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__.default.removeUrlParam(window.location.hash, 'tab'));
+ this.props.onCreateTopic(undefined, (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_8__.vcard)(name, dataUrl), priv, tags, isChannel);
+ }
+
+ handleGroupByID(topicName) {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__.default.removeUrlParam(window.location.hash, 'tab'));
+ this.props.onCreateTopic(topicName);
+ }
+
+ render() {
+ const {
+ formatMessage
+ } = this.props.intl;
+ const no_contacts_placeholder = formatMessage(this.state.searchQuery ? messages.search_no_results : messages.search_for_contacts);
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "flex-column"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", {
+ className: "tabbar"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
+ className: this.state.tabSelected === "p2p" ? "active" : null
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ "data-id": "p2p",
+ onClick: this.handleTabClick
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "tabtitle_find_user",
+ defaultMessage: [{
+ "type": 0,
+ "value": "find"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
+ className: this.state.tabSelected === "grp" ? "active" : null
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ "data-id": "grp",
+ onClick: this.handleTabClick
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "tabtitle_new_group",
+ defaultMessage: [{
+ "type": 0,
+ "value": "new group"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
+ className: this.state.tabSelected === "byid" ? "active" : null
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ "data-id": "byid",
+ onClick: this.handleTabClick
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "tabtitle_group_by_id",
+ defaultMessage: [{
+ "type": 0,
+ "value": "by id"
+ }]
+ })))), this.state.tabSelected === 'grp' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_new_topic_group_jsx__WEBPACK_IMPORTED_MODULE_5__.default, {
+ tinode: this.props.tinode,
+ onSubmit: this.handleNewGroupSubmit
+ }) : this.state.tabSelected === 'byid' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_new_topic_by_id_jsx__WEBPACK_IMPORTED_MODULE_4__.default, {
+ onSubmit: this.handleGroupByID,
+ onError: this.props.onError
+ }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "flex-column"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_search_contacts_jsx__WEBPACK_IMPORTED_MODULE_6__.default, {
+ type: "p2p",
+ onSearchContacts: this.handleSearchContacts
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_3__.default, {
+ contacts: this.props.searchResults,
+ myUserId: this.props.myUserId,
+ emptyListMessage: no_contacts_placeholder,
+ showOnline: false,
+ showUnread: false,
+ showContextMenu: false,
+ onTopicSelected: this.handleContactSelected
+ })));
+ }
+
+}
+
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(NewTopicView));
+
+/***/ }),
+
+/***/ "./src/views/password-reset-view.jsx":
+/*!*******************************************!*\
+ !*** ./src/views/password-reset-view.jsx ***!
+ \*******************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ PasswordResetView; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _widgets_visible_password_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/visible-password.jsx */ "./src/widgets/visible-password.jsx");
+/* harmony import */ var _lib_navigation_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/navigation.js */ "./src/lib/navigation.js");
+
+
+
+
+class PasswordResetView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ email: '',
+ password: ''
+ };
+ this.handleSubmit = this.handleSubmit.bind(this);
+ this.handleEmailChange = this.handleEmailChange.bind(this);
+ this.handlePasswordChange = this.handlePasswordChange.bind(this);
+ }
+
+ componentDidMount() {
+ let parsed = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_3__.default.parseUrlHash(window.location.hash);
+ this.setState({
+ token: parsed.params.token,
+ scheme: parsed.params.scheme
+ });
+ }
+
+ handleSubmit(e) {
+ e.preventDefault();
+
+ if (this.state.token) {
+ this.props.onReset(this.state.scheme, this.state.password.trim(), this.state.token);
+ } else {
+ this.props.onRequest('email', this.state.email.trim());
+ }
+ }
+
+ handleEmailChange(e) {
+ this.setState({
+ email: e.target.value
+ });
+ }
+
+ handlePasswordChange(e) {
+ this.setState({
+ password: e.target.value
+ });
+ }
+
+ render() {
+ let reset = this.state.token && this.state.scheme;
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("form", {
+ id: "password-reset-form",
+ onSubmit: this.handleSubmit
+ }, reset ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "new_password_placeholder",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Enter new password"
+ }]
+ }, placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_visible_password_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ placeholder: placeholder,
+ autoComplete: "new-password",
+ value: this.state.password,
+ required: true,
+ autoFocus: true,
+ onChange: this.handlePasswordChange
+ })) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ htmlFor: "inputEmail"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_reset_password",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Send a password reset email:"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "credential_email_prompt",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Your registration email"
+ }]
+ }, placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
+ type: "email",
+ id: "inputEmail",
+ placeholder: placeholder,
+ autoComplete: "email",
+ value: this.state.email,
+ onChange: this.handleEmailChange,
+ required: true,
+ autoFocus: true
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "dialog-buttons"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
+ className: "blue",
+ type: "submit"
+ }, reset ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_reset",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Reset"
+ }]
+ }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_send_request",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Send request"
+ }]
+ }))));
+ }
+
+}
+
+/***/ }),
+
+/***/ "./src/views/settings-view.jsx":
+/*!*************************************!*\
+ !*** ./src/views/settings-view.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ SettingsView; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _widgets_host_selector_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/host-selector.jsx */ "./src/widgets/host-selector.jsx");
+
+
+
+class SettingsView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ transport: props.transport || 'def',
+ serverAddress: props.serverAddress
+ };
+ this.handleSubmit = this.handleSubmit.bind(this);
+ this.handleTransportSelected = this.handleTransportSelected.bind(this);
+ this.handleServerAddressChange = this.handleServerAddressChange.bind(this);
+ }
+
+ handleSubmit(e) {
+ e.preventDefault();
+ this.props.onUpdate({
+ transport: this.state.transport,
+ serverAddress: this.state.serverAddress
+ });
+ }
+
+ handleTransportSelected(e) {
+ this.setState({
+ transport: e.currentTarget.value
+ });
+ }
+
+ handleServerAddressChange(name) {
+ this.setState({
+ serverAddress: name
+ });
+ }
+
+ render() {
+ const names = {
+ def: "default",
+ ws: "websocket",
+ lp: "long polling"
+ };
+ var transportOptions = [];
+ var instance = this;
+ ['def', 'ws', 'lp'].map(function (item) {
+ var id = 'transport-' + item;
+ var name = names[item];
+ transportOptions.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
+ key: item
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
+ type: "radio",
+ id: id,
+ name: "transport-select",
+ value: item,
+ checked: instance.state.transport === item,
+ onChange: instance.handleTransportSelected
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ htmlFor: id
+ }, name)));
+ });
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("form", {
+ id: "settings-form",
+ className: "panel-form",
+ onSubmit: this.handleSubmit
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_server_to_use",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Server to use:"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_host_selector_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ serverAddress: this.state.serverAddress,
+ onServerAddressChange: this.handleServerAddressChange
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_wire_transport",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Wire transport:"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", {
+ className: "quoted"
+ }, transportOptions)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "dialog-buttons"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
+ type: "submit",
+ className: "blue"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_update",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Update"
+ }]
+ }))));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/views/sidepanel-view.jsx":
+/*!**************************************!*\
+ !*** ./src/views/sidepanel-view.jsx ***!
+ \**************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _widgets_error_panel_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/error-panel.jsx */ "./src/widgets/error-panel.jsx");
+/* harmony import */ var _widgets_load_spinner_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/load-spinner.jsx */ "./src/widgets/load-spinner.jsx");
+/* harmony import */ var _widgets_side_navbar_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/side-navbar.jsx */ "./src/widgets/side-navbar.jsx");
+/* harmony import */ var _contacts_view_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./contacts-view.jsx */ "./src/views/contacts-view.jsx");
+/* harmony import */ var _create_account_view_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./create-account-view.jsx */ "./src/views/create-account-view.jsx");
+/* harmony import */ var _edit_account_view_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./edit-account-view.jsx */ "./src/views/edit-account-view.jsx");
+/* harmony import */ var _acc_general_view_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./acc-general-view.jsx */ "./src/views/acc-general-view.jsx");
+/* harmony import */ var _acc_notifications_view_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./acc-notifications-view.jsx */ "./src/views/acc-notifications-view.jsx");
+/* harmony import */ var _acc_security_view_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./acc-security-view.jsx */ "./src/views/acc-security-view.jsx");
+/* harmony import */ var _acc_support_view_jsx__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./acc-support-view.jsx */ "./src/views/acc-support-view.jsx");
+/* harmony import */ var _login_view_jsx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./login-view.jsx */ "./src/views/login-view.jsx");
+/* harmony import */ var _new_topic_view_jsx__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./new-topic-view.jsx */ "./src/views/new-topic-view.jsx");
+/* harmony import */ var _password_reset_view_jsx__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./password-reset-view.jsx */ "./src/views/password-reset-view.jsx");
+/* harmony import */ var _settings_view_jsx__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./settings-view.jsx */ "./src/views/settings-view.jsx");
+/* harmony import */ var _validation_view_jsx__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./validation-view.jsx */ "./src/views/validation-view.jsx");
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ login: {
+ "id": "sidepanel_title_login",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Sign In"
+ }]
+ },
+ register: {
+ "id": "sidepanel_title_register",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Create Account"
+ }]
+ },
+ settings: {
+ "id": "sidepanel_title_settings",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Settings"
+ }]
+ },
+ edit: {
+ "id": "sidepanel_title_account_settings",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Account Settings"
+ }]
+ },
+ general: {
+ "id": "sidepanel_title_acc_general",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "General"
+ }]
+ },
+ security: {
+ "id": "sidepanel_title_acc_security",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Security"
+ }]
+ },
+ notif: {
+ "id": "sidepanel_title_acc_notifications",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Notifications"
+ }]
+ },
+ support: {
+ "id": "sidepanel_title_acc_support",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Support"
+ }]
+ },
+ newtpk: {
+ "id": "sidepanel_title_newtpk",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Start New Chat"
+ }]
+ },
+ cred: {
+ "id": "sidepanel_title_cred",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Confirm Credentials"
+ }]
+ },
+ reset: {
+ "id": "sidepanel_title_reset",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Reset Password"
+ }]
+ },
+ archive: {
+ "id": "sidepanel_title_archive",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Archived Chats"
+ }]
+ },
+ blocked: {
+ "id": "sidepanel_title_blocked",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Blocked Chats"
+ }]
+ }
+});
+
+class SidepanelView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.handleLoginRequested = this.handleLoginRequested.bind(this);
+ this.handleNewTopic = this.handleNewTopic.bind(this);
+ }
+
+ handleLoginRequested(login, password) {
+ this.props.onLoginRequest(login, password);
+ }
+
+ handleNewTopic() {
+ this.props.onBasicNavigate('newtpk');
+ }
+
+ render() {
+ const {
+ formatMessage
+ } = this.props.intl;
+ const view = this.props.state || (this.props.myUserId ? 'contacts' : 'login');
+ let title, avatar;
+
+ if (view == 'contacts') {
+ title = this.props.title;
+ avatar = this.props.avatar ? this.props.avatar : true;
+ } else {
+ title = formatMessage(messages[view]);
+ avatar = false;
+ }
+
+ let onCancel;
+
+ if (['login', 'contacts'].indexOf(view) == -1) {
+ onCancel = this.props.onCancel;
+ }
+
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "sidepanel",
+ className: this.props.hideSelf ? 'nodisplay' : null
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_side_navbar_jsx__WEBPACK_IMPORTED_MODULE_4__.default, {
+ state: view,
+ title: title,
+ avatar: avatar,
+ myUserId: this.props.myUserId,
+ onSignUp: this.props.onSignUp,
+ onSettings: this.props.onSettings,
+ onNewTopic: this.handleNewTopic,
+ onCancel: onCancel
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_error_panel_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ level: this.props.errorLevel,
+ text: this.props.errorText,
+ action: this.props.errorAction,
+ actionText: this.props.errorActionText,
+ onClearError: this.props.onError
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_load_spinner_jsx__WEBPACK_IMPORTED_MODULE_3__.default, {
+ show: this.props.loadSpinnerVisible
+ }), view === 'login' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_login_view_jsx__WEBPACK_IMPORTED_MODULE_12__.default, {
+ login: this.props.login,
+ disabled: this.props.loginDisabled,
+ onLogin: this.handleLoginRequested
+ }) : view === 'register' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_create_account_view_jsx__WEBPACK_IMPORTED_MODULE_6__.default, {
+ onCreateAccount: this.props.onCreateAccount,
+ onCancel: this.props.onCancel,
+ onError: this.props.onError
+ }) : view === 'settings' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_settings_view_jsx__WEBPACK_IMPORTED_MODULE_15__.default, {
+ transport: this.props.transport,
+ serverAddress: this.props.serverAddress,
+ onCancel: this.props.onCancel,
+ onUpdate: this.props.onGlobalSettings
+ }) : view === 'edit' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_edit_account_view_jsx__WEBPACK_IMPORTED_MODULE_7__.default, {
+ tinode: this.props.tinode,
+ myUserId: this.props.myUserId,
+ onBasicNavigate: this.props.onBasicNavigate
+ }) : view === 'general' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_acc_general_view_jsx__WEBPACK_IMPORTED_MODULE_8__.default, {
+ tinode: this.props.tinode,
+ myUserId: this.props.myUserId,
+ onUpdateAccount: this.props.onUpdateAccount,
+ onUpdateTags: this.props.onUpdateAccountTags,
+ onCredAdd: this.props.onCredAdd,
+ onCredDelete: this.props.onCredDelete,
+ onCredConfirm: this.props.onCredConfirm,
+ onBasicNavigate: this.props.onBasicNavigate,
+ onError: this.props.onError
+ }) : view === 'notif' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_acc_notifications_view_jsx__WEBPACK_IMPORTED_MODULE_9__.default, {
+ messageSounds: this.props.messageSounds,
+ desktopAlerts: this.props.desktopAlerts,
+ desktopAlertsEnabled: this.props.desktopAlertsEnabled,
+ incognitoMode: this.props.incognitoMode,
+ onTogglePushNotifications: this.props.onTogglePushNotifications,
+ onToggleMessageSounds: this.props.onToggleMessageSounds,
+ onToggleIncognitoMode: this.props.onToggleIncognitoMode
+ }) : view === 'security' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_acc_security_view_jsx__WEBPACK_IMPORTED_MODULE_10__.default, {
+ tinode: this.props.tinode,
+ onUpdateAccount: this.props.onUpdateAccount,
+ onLogout: this.props.onLogout,
+ onDeleteAccount: this.props.onDeleteAccount,
+ onShowAlert: this.props.onShowAlert,
+ onShowBlocked: this.props.onShowBlocked
+ }) : view === 'support' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_acc_support_view_jsx__WEBPACK_IMPORTED_MODULE_11__.default, {
+ serverAddress: this.props.serverAddress,
+ serverVersion: this.props.serverVersion
+ }) : view === 'contacts' || view == 'archive' || view == 'blocked' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contacts_view_jsx__WEBPACK_IMPORTED_MODULE_5__.default, {
+ tinode: this.props.tinode,
+ myUserId: this.props.myUserId,
+ connected: this.props.connected,
+ topicSelected: this.props.topicSelected,
+ archive: view == 'archive',
+ blocked: view == 'blocked',
+ chatList: this.props.chatList,
+ showContextMenu: this.props.showContextMenu,
+ onTopicSelected: this.props.onTopicSelected,
+ onShowArchive: this.props.onShowArchive
+ }) : view === 'newtpk' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_new_topic_view_jsx__WEBPACK_IMPORTED_MODULE_13__.default, {
+ tinode: this.props.tinode,
+ searchResults: this.props.searchResults,
+ onInitFind: this.props.onInitFind,
+ onSearchContacts: this.props.onSearchContacts,
+ onCreateTopic: this.props.onCreateTopic,
+ onError: this.props.onError
+ }) : view === 'cred' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_validation_view_jsx__WEBPACK_IMPORTED_MODULE_16__.default, {
+ credCode: this.props.credCode,
+ credMethod: this.props.credMethod,
+ onSubmit: this.props.onValidateCredentials,
+ onCancel: this.props.onCancel,
+ onError: this.props.onError
+ }) : view === 'reset' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_password_reset_view_jsx__WEBPACK_IMPORTED_MODULE_14__.default, {
+ onRequest: this.props.onPasswordResetRequest,
+ onReset: this.props.onResetPassword
+ }) : null);
+ }
+
+}
+
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(SidepanelView));
+
+/***/ }),
+
+/***/ "./src/views/tinode-web.jsx":
+/*!**********************************!*\
+ !*** ./src/views/tinode-web.jsx ***!
+ \**********************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "react-dom");
+/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var firebase_app__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! firebase/app */ "firebase/app");
+/* harmony import */ var firebase_app__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(firebase_app__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var firebase_messaging__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! firebase/messaging */ "firebase/messaging");
+/* harmony import */ var firebase_messaging__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(firebase_messaging__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var _widgets_alert_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../widgets/alert.jsx */ "./src/widgets/alert.jsx");
+/* harmony import */ var _widgets_context_menu_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../widgets/context-menu.jsx */ "./src/widgets/context-menu.jsx");
+/* harmony import */ var _info_view_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./info-view.jsx */ "./src/views/info-view.jsx");
+/* harmony import */ var _messages_view_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./messages-view.jsx */ "./src/views/messages-view.jsx");
+/* harmony import */ var _sidepanel_view_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./sidepanel-view.jsx */ "./src/views/sidepanel-view.jsx");
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
+/* harmony import */ var _lib_host_name_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../lib/host-name.js */ "./src/lib/host-name.js");
+/* harmony import */ var _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../lib/local-storage.js */ "./src/lib/local-storage.js");
+/* harmony import */ var _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../lib/navigation.js */ "./src/lib/navigation.js");
+/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
+/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+const POP_SOUND = new Audio('audio/msg.mp3');
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_2__.defineMessages)({
+ reconnect_countdown: {
+ "id": "reconnect_countdown",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Disconnected. Reconnecting in "
+ }, {
+ "type": 1,
+ "value": "seconds"
+ }, {
+ "type": 0,
+ "value": "…"
+ }]
+ },
+ reconnect_now: {
+ "id": "reconnect_now",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Try now"
+ }]
+ },
+ push_init_failed: {
+ "id": "push_init_failed",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Failed to initialize push notifications"
+ }]
+ },
+ invalid_security_token: {
+ "id": "invalid_security_token",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Invalid security token"
+ }]
+ },
+ no_connection: {
+ "id": "no_connection",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "No connection"
+ }]
+ },
+ code_doesnot_match: {
+ "id": "code_doesnot_match",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Code does not match"
+ }]
+ },
+ menu_item_info: {
+ "id": "menu_item_info",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Info"
+ }]
+ }
+});
+
+class TinodeWeb extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.state = this.getBlankState();
+ this.handleResize = this.handleResize.bind(this);
+ this.handleHashRoute = this.handleHashRoute.bind(this);
+ this.handleOnline = this.handleOnline.bind(this);
+ this.checkForAppUpdate = this.checkForAppUpdate.bind(this);
+ this.handleVisibilityEvent = this.handleVisibilityEvent.bind(this);
+ this.handleError = this.handleError.bind(this);
+ this.handleLoginRequest = this.handleLoginRequest.bind(this);
+ this.handleConnected = this.handleConnected.bind(this);
+ this.handleAutoreconnectIteration = this.handleAutoreconnectIteration.bind(this);
+ this.doLogin = this.doLogin.bind(this);
+ this.handleCredentialsRequest = this.handleCredentialsRequest.bind(this);
+ this.handleLoginSuccessful = this.handleLoginSuccessful.bind(this);
+ this.handleDisconnect = this.handleDisconnect.bind(this);
+ this.tnMeMetaDesc = this.tnMeMetaDesc.bind(this);
+ this.tnMeContactUpdate = this.tnMeContactUpdate.bind(this);
+ this.tnMeSubsUpdated = this.tnMeSubsUpdated.bind(this);
+ this.resetContactList = this.resetContactList.bind(this);
+ this.tnData = this.tnData.bind(this);
+ this.tnInitFind = this.tnInitFind.bind(this);
+ this.tnFndSubsUpdated = this.tnFndSubsUpdated.bind(this);
+ this.handleSearchContacts = this.handleSearchContacts.bind(this);
+ this.handleTopicSelected = this.handleTopicSelected.bind(this);
+ this.handleHideMessagesView = this.handleHideMessagesView.bind(this);
+ this.handleSendMessage = this.handleSendMessage.bind(this);
+ this.handleNewChatInvitation = this.handleNewChatInvitation.bind(this);
+ this.handleNewAccount = this.handleNewAccount.bind(this);
+ this.handleNewAccountRequest = this.handleNewAccountRequest.bind(this);
+ this.handleUpdateAccountRequest = this.handleUpdateAccountRequest.bind(this);
+ this.handleUpdateAccountTagsRequest = this.handleUpdateAccountTagsRequest.bind(this);
+ this.handleToggleIncognitoMode = this.handleToggleIncognitoMode.bind(this);
+ this.handleSettings = this.handleSettings.bind(this);
+ this.handleGlobalSettings = this.handleGlobalSettings.bind(this);
+ this.handleShowArchive = this.handleShowArchive.bind(this);
+ this.handleShowBlocked = this.handleShowBlocked.bind(this);
+ this.handleToggleMessageSounds = this.handleToggleMessageSounds.bind(this);
+ this.handleCredAdd = this.handleCredAdd.bind(this);
+ this.handleCredDelete = this.handleCredDelete.bind(this);
+ this.handleCredConfirm = this.handleCredConfirm.bind(this);
+ this.initDesktopAlerts = this.initDesktopAlerts.bind(this);
+ this.togglePushToken = this.togglePushToken.bind(this);
+ this.requestPushToken = this.requestPushToken.bind(this);
+ this.handleSidepanelCancel = this.handleSidepanelCancel.bind(this);
+ this.handleStartTopicRequest = this.handleStartTopicRequest.bind(this);
+ this.handleNewTopicCreated = this.handleNewTopicCreated.bind(this);
+ this.handleTopicUpdateRequest = this.handleTopicUpdateRequest.bind(this);
+ this.handleChangePermissions = this.handleChangePermissions.bind(this);
+ this.handleTagsUpdated = this.handleTagsUpdated.bind(this);
+ this.handleLogout = this.handleLogout.bind(this);
+ this.handleDeleteAccount = this.handleDeleteAccount.bind(this);
+ this.handleDeleteMessagesRequest = this.handleDeleteMessagesRequest.bind(this);
+ this.handleLeaveUnsubRequest = this.handleLeaveUnsubRequest.bind(this);
+ this.handleBlockTopicRequest = this.handleBlockTopicRequest.bind(this);
+ this.handleReportTopic = this.handleReportTopic.bind(this);
+ this.handleShowContextMenu = this.handleShowContextMenu.bind(this);
+ this.defaultTopicContextMenu = this.defaultTopicContextMenu.bind(this);
+ this.handleHideContextMenu = this.handleHideContextMenu.bind(this);
+ this.handleShowAlert = this.handleShowAlert.bind(this);
+ this.handleShowInfoView = this.handleShowInfoView.bind(this);
+ this.handleHideInfoView = this.handleHideInfoView.bind(this);
+ this.handleMemberUpdateRequest = this.handleMemberUpdateRequest.bind(this);
+ this.handleValidateCredentialsRequest = this.handleValidateCredentialsRequest.bind(this);
+ this.handlePasswordResetRequest = this.handlePasswordResetRequest.bind(this);
+ this.handleResetPassword = this.handleResetPassword.bind(this);
+ this.handleContextMenuAction = this.handleContextMenuAction.bind(this);
+ }
+
+ getBlankState() {
+ const settings = _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_14__.default.getObject('settings') || {};
+ return {
+ connected: false,
+ ready: false,
+ autoLogin: false,
+ transport: settings.transport || null,
+ serverAddress: settings.serverAddress || (0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_13__.detectServerAddress)(),
+ serverVersion: "no connection",
+ messageSounds: !settings.messageSoundsOff,
+ incognitoMode: false,
+ desktopAlerts: settings.desktopAlerts,
+ desktopAlertsEnabled: ((0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_13__.isSecureConnection)() || (0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_13__.isLocalHost)()) && typeof firebase_app__WEBPACK_IMPORTED_MODULE_3__ != 'undefined' && typeof navigator != 'undefined' && typeof FIREBASE_INIT != 'undefined',
+ firebaseToken: _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_14__.default.getObject('firebase-token'),
+ applicationVisible: !document.hidden,
+ errorText: '',
+ errorLevel: null,
+ errorAction: undefined,
+ errorActionText: null,
+ sidePanelSelected: 'login',
+ sidePanelTitle: null,
+ sidePanelAvatar: null,
+ loadSpinnerVisible: false,
+ login: '',
+ password: '',
+ myUserId: null,
+ liveConnection: navigator.onLine,
+ topicSelected: '',
+ topicSelectedOnline: false,
+ topicSelectedAcs: null,
+ newTopicParams: null,
+ loginDisabled: false,
+ displayMobile: window.innerWidth <= _config_js__WEBPACK_IMPORTED_MODULE_11__.MEDIA_BREAKPOINT,
+ showInfoPanel: false,
+ mobilePanel: 'sidepanel',
+ contextMenuVisible: false,
+ contextMenuBounds: null,
+ contextMenuClickAt: null,
+ contextMenuParams: null,
+ contextMenuItems: [],
+ alertVisible: false,
+ alertParams: {},
+ chatList: [],
+ searchResults: [],
+ searchableContacts: [],
+ credMethod: undefined,
+ credCode: undefined
+ };
+ }
+
+ componentDidMount() {
+ window.addEventListener('resize', this.handleResize);
+ window.addEventListener('online', e => {
+ this.handleOnline(true);
+ });
+ window.addEventListener('offline', e => {
+ this.handleOnline(false);
+ });
+ window.addEventListener('hashchange', this.handleHashRoute);
+ document.addEventListener('visibilitychange', this.handleVisibilityEvent);
+ this.setState({
+ viewportWidth: document.documentElement.clientWidth,
+ viewportHeight: document.documentElement.clientHeight
+ });
+ const {
+ formatMessage,
+ locale
+ } = this.props.intl;
+ this.tinode = TinodeWeb.tnSetup(this.state.serverAddress, this.state.transport, locale);
+ this.tinode.onConnect = this.handleConnected;
+ this.tinode.onDisconnect = this.handleDisconnect;
+ this.tinode.onAutoreconnectIteration = this.handleAutoreconnectIteration;
+
+ if (this.state.desktopAlertsEnabled) {
+ try {
+ this.fbPush = firebase_app__WEBPACK_IMPORTED_MODULE_3__.initializeApp(FIREBASE_INIT, _config_js__WEBPACK_IMPORTED_MODULE_11__.APP_NAME).messaging();
+ this.fbPush.usePublicVapidKey(FIREBASE_INIT.messagingVapidKey);
+ navigator.serviceWorker.register('/service-worker.js').then(reg => {
+ this.checkForAppUpdate(reg);
+ this.fbPush.useServiceWorker(reg);
+ reg.active.postMessage(JSON.stringify({
+ locale: locale
+ }));
+ this.initDesktopAlerts();
+
+ if (this.state.desktopAlerts) {
+ if (!this.state.firebaseToken) {
+ this.togglePushToken(true);
+ } else {
+ this.tinode.setDeviceToken(this.state.firebaseToken, true);
+ }
+ }
+ }).catch(err => {
+ console.log("Failed to register service worker:", err);
+ });
+ } catch (err) {
+ this.handleError(formatMessage(messages.push_init_failed), 'err');
+ console.log("Failed to initialize push notifications", err);
+ this.setState({
+ desktopAlertsEnabled: false
+ });
+ }
+ }
+
+ const token = _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_14__.default.getObject('keep-logged-in') ? _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_14__.default.getObject('auth-token') : undefined;
+ const parsedNav = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.parseUrlHash(window.location.hash);
+
+ if (token) {
+ this.setState({
+ autoLogin: true
+ });
+ token.expires = new Date(token.expires);
+ this.tinode.setAuthToken(token);
+ this.tinode.connect().catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ delete parsedNav.params.info;
+ delete parsedNav.params.tab;
+ parsedNav.path[0] = '';
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.composeUrlHash(parsedNav.path, parsedNav.params));
+ } else if (!parsedNav.params.token) {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo('');
+ }
+
+ this.readTimer = null;
+ this.readTimerCallback = null;
+ this.handleHashRoute();
+ }
+
+ componentWillUnmount() {
+ window.removeEventListener('resize', this.handleResize);
+ window.removeEventListener('hashchange', this.handleHashRoute);
+ document.removeEventListener('visibilitychange', this.handleVisibilityEvent);
+ }
+
+ static tnSetup(serverAddress, transport, locale) {
+ const tinode = new (tinode_sdk__WEBPACK_IMPORTED_MODULE_5___default())(_config_js__WEBPACK_IMPORTED_MODULE_11__.APP_NAME, serverAddress, _config_js__WEBPACK_IMPORTED_MODULE_11__.API_KEY, transport, (0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_13__.isSecureConnection)());
+ tinode.setHumanLanguage(locale);
+ tinode.enableLogging(_config_js__WEBPACK_IMPORTED_MODULE_11__.LOGGING_ENABLED, true);
+ return tinode;
+ }
+
+ handleResize() {
+ const mobile = document.documentElement.clientWidth <= _config_js__WEBPACK_IMPORTED_MODULE_11__.MEDIA_BREAKPOINT;
+ this.setState({
+ viewportWidth: document.documentElement.clientWidth,
+ viewportHeight: document.documentElement.clientHeight
+ });
+
+ if (this.state.displayMobile != mobile) {
+ this.setState({
+ displayMobile: mobile
+ });
+ }
+ }
+
+ checkForAppUpdate(reg) {
+ reg.onupdatefound = () => {
+ const installingWorker = reg.installing;
+
+ installingWorker.onstatechange = () => {
+ if (installingWorker.state == 'installed' && navigator.serviceWorker.controller) {
+ const msg = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__.FormattedMessage, {
+ id: "update_available",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Update available."
+ }]
+ }), " ", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: ""
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__.FormattedMessage, {
+ id: "reload_update",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Reload"
+ }]
+ })), ".");
+ this.handleError(msg, 'info');
+ }
+ };
+ };
+ }
+
+ handleHashRoute() {
+ const hash = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.parseUrlHash(window.location.hash);
+
+ if (hash.path && hash.path.length > 0) {
+ if (['register', 'settings', 'edit', 'notif', 'security', 'support', 'general', 'cred', 'reset', 'newtpk', 'archive', 'blocked', 'contacts', ''].includes(hash.path[0])) {
+ this.setState({
+ sidePanelSelected: hash.path[0]
+ });
+ } else {
+ console.log("Unknown sidepanel view", hash.path[0]);
+ }
+
+ if (hash.path.length > 1 && hash.path[1] != this.state.topicSelected) {
+ this.setState({
+ topicSelected: tinode_sdk__WEBPACK_IMPORTED_MODULE_5___default().topicType(hash.path[1]) ? hash.path[1] : null
+ });
+ }
+ } else {
+ this.setState({
+ sidePanelSelected: ''
+ });
+ }
+
+ if (hash.params.method) {
+ this.setState({
+ credMethod: hash.params.method
+ });
+ }
+
+ if (hash.params.code) {
+ this.setState({
+ credCode: hash.params.code
+ });
+ }
+
+ this.setState({
+ showInfoPanel: hash.params.info,
+ newTopicTabSelected: hash.params.tab
+ });
+ }
+
+ handleOnline(online) {
+ if (online) {
+ this.handleError();
+ } else {
+ this.handleError(this.props.intl.formatMessage(messages.no_connection), 'warn');
+ }
+
+ this.setState({
+ liveConnection: online
+ });
+ }
+
+ handleVisibilityEvent() {
+ this.setState({
+ applicationVisible: !document.hidden
+ });
+ }
+
+ handleError(err, level, action, actionText) {
+ this.setState({
+ errorText: err,
+ errorLevel: level,
+ errorAction: action,
+ errorActionText: actionText
+ });
+ }
+
+ handleLoginRequest(login, password) {
+ this.setState({
+ loginDisabled: true,
+ login: login,
+ password: password,
+ loadSpinnerVisible: true,
+ autoLogin: true
+ });
+ this.handleError('', null);
+
+ if (this.tinode.isConnected()) {
+ this.doLogin(login, password, {
+ meth: this.state.credMethod,
+ resp: this.state.credCode
+ });
+ } else {
+ this.tinode.connect().catch(err => {
+ this.setState({
+ loginDisabled: false,
+ autoLogin: false,
+ loadSpinnerVisible: false
+ });
+ this.handleError(err.message, 'err');
+ });
+ }
+ }
+
+ handleConnected() {
+ const params = this.tinode.getServerInfo();
+ this.setState({
+ serverVersion: params.ver + ' ' + (params.build ? params.build : 'none')
+ });
+
+ if (this.state.autoLogin) {
+ this.doLogin(this.state.login, this.state.password, {
+ meth: this.state.credMethod,
+ resp: this.state.credCode
+ });
+ }
+ }
+
+ handleAutoreconnectIteration(sec, prom) {
+ clearInterval(this.reconnectCountdown);
+
+ if (sec < 0) {
+ this.handleError();
+ return;
+ }
+
+ if (prom) {
+ prom.then(() => {
+ this.handleError();
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ return;
+ }
+
+ const {
+ formatMessage
+ } = this.props.intl;
+ let count = sec / 1000;
+ count = count | count;
+ this.reconnectCountdown = setInterval(() => {
+ const timeLeft = count > 99 ? (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_16__.secondsToTime)(count) : count;
+ this.handleError(formatMessage(messages.reconnect_countdown, {
+ seconds: timeLeft
+ }), 'warn', () => {
+ clearInterval(this.reconnectCountdown);
+ this.tinode.reconnect();
+ }, formatMessage(messages.reconnect_now));
+ count -= 1;
+ }, 1000);
+ }
+
+ handleDisconnect(err) {
+ this.setState({
+ connected: false,
+ ready: false,
+ topicSelectedOnline: false,
+ errorText: err && err.message ? err.message : "Disconnected",
+ errorLevel: err && err.message ? 'err' : 'warn',
+ loginDisabled: false,
+ contextMenuVisible: false,
+ serverVersion: "no connection"
+ });
+ }
+
+ doLogin(login, password, cred) {
+ if (this.tinode.isAuthenticated()) {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo('');
+ return;
+ }
+
+ cred = tinode_sdk__WEBPACK_IMPORTED_MODULE_5___default().credential(cred);
+ let promise = null;
+ const token = this.tinode.getAuthToken();
+
+ if (login && password) {
+ this.setState({
+ password: null
+ });
+ promise = this.tinode.loginBasic(login, password, cred);
+ } else if (token) {
+ promise = this.tinode.loginToken(token.token, cred);
+ }
+
+ if (promise) {
+ promise.then(ctrl => {
+ if (ctrl.code >= 300 && ctrl.text === 'validate credentials') {
+ this.setState({
+ loadSpinnerVisible: false
+ });
+
+ if (cred) {
+ this.handleError(this.props.intl.formatMessage(messages.code_doesnot_match), 'warn');
+ }
+
+ this.handleCredentialsRequest(ctrl.params);
+ } else {
+ this.handleLoginSuccessful();
+ }
+ }).catch(err => {
+ this.setState({
+ loginDisabled: false,
+ credMethod: undefined,
+ credCode: undefined,
+ loadSpinnerVisible: false,
+ autoLogin: false
+ });
+ this.handleError(err.message, 'err');
+ localStorage.removeItem('auth-token');
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo('');
+ });
+ } else {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo('');
+ this.setState({
+ loginDisabled: false
+ });
+ }
+ }
+
+ handleCredentialsRequest(params) {
+ const parsed = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.parseUrlHash(window.location.hash);
+ parsed.path[0] = 'cred';
+ parsed.params['method'] = params.cred[0];
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.composeUrlHash(parsed.path, parsed.params));
+ }
+
+ handleLoginSuccessful() {
+ this.handleError();
+
+ if (_lib_local_storage_js__WEBPACK_IMPORTED_MODULE_14__.default.getObject('keep-logged-in')) {
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_14__.default.setObject('auth-token', this.tinode.getAuthToken());
+ }
+
+ const me = this.tinode.getMeTopic();
+ me.onMetaDesc = this.tnMeMetaDesc;
+ me.onContactUpdate = this.tnMeContactUpdate;
+ me.onSubsUpdated = this.tnMeSubsUpdated;
+ this.setState({
+ connected: true,
+ credMethod: undefined,
+ credCode: undefined,
+ myUserId: this.tinode.getCurrentUserID(),
+ autoLogin: true
+ });
+ me.subscribe(me.startMetaQuery().withLaterSub().withDesc().withTags().withCred().build()).catch(err => {
+ this.tinode.disconnect();
+ localStorage.removeItem('auth-token');
+ this.handleError(err.message, 'err');
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo('');
+ }).finally(() => {
+ this.setState({
+ loadSpinnerVisible: false
+ });
+ });
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.setUrlSidePanel(window.location.hash, 'contacts'));
+ }
+
+ tnMeMetaDesc(desc) {
+ if (desc) {
+ if (desc.public) {
+ this.setState({
+ sidePanelTitle: desc.public.fn,
+ sidePanelAvatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_12__.makeImageUrl)(desc.public.photo)
+ });
+ }
+
+ if (desc.acs) {
+ this.setState({
+ incognitoMode: !desc.acs.isPresencer()
+ });
+ }
+ }
+ }
+
+ tnMeContactUpdate(what, cont) {
+ if (what == 'on' || what == 'off') {
+ this.resetContactList();
+
+ if (this.state.topicSelected == cont.topic) {
+ this.setState({
+ topicSelectedOnline: what == 'on'
+ });
+ }
+ } else if (what == 'read') {
+ this.resetContactList();
+ } else if (what == 'msg') {
+ const topic = this.tinode.getTopic(cont.topic);
+ const archived = topic && topic.isArchived();
+
+ if (cont.unread > 0 && this.state.messageSounds && !archived) {
+ if (document.hidden || this.state.topicSelected != cont.topic) {
+ POP_SOUND.play();
+ }
+ }
+
+ this.resetContactList();
+ } else if (what == 'recv') {} else if (what == 'gone' || what == 'unsub') {
+ if (this.state.topicSelected == cont.topic) {
+ this.handleTopicSelected(null);
+ }
+
+ this.resetContactList();
+ } else if (what == 'acs') {
+ if (this.state.topicSelected == cont.topic) {
+ this.setState({
+ topicSelectedAcs: cont.acs
+ });
+ }
+ } else if (what == 'del') {} else if (what == 'upd') {} else {
+ console.log("Unsupported (yet) presence update:" + what + " in: " + cont.topic);
+ }
+ }
+
+ tnMeSubsUpdated(unused) {
+ this.resetContactList();
+ }
+
+ static prepareSearchableContacts(chatList, foundContacts) {
+ const merged = {};
+
+ for (const c of chatList) {
+ if (tinode_sdk__WEBPACK_IMPORTED_MODULE_5___default().isP2PTopicName(c.topic)) {
+ merged[c.topic] = {
+ user: c.topic,
+ updated: c.updated,
+ public: c.public,
+ private: c.private,
+ acs: c.acs
+ };
+ }
+ }
+
+ for (const c of foundContacts) {
+ if (!merged[c.user]) {
+ merged[c.user] = c;
+ }
+ }
+
+ return Object.values(merged);
+ }
+
+ resetContactList() {
+ const newState = {
+ chatList: []
+ };
+
+ if (!this.state.ready) {
+ newState.ready = true;
+ }
+
+ this.tinode.getMeTopic().contacts(c => {
+ newState.chatList.push(c);
+
+ if (this.state.topicSelected == c.topic) {
+ newState.topicSelectedOnline = c.online;
+ newState.topicSelectedAcs = c.acs;
+ }
+ });
+ newState.searchableContacts = TinodeWeb.prepareSearchableContacts(newState.chatList, this.state.searchResults);
+ this.setState(newState);
+ }
+
+ tnData(data) {
+ const topic = this.tinode.getTopic(data.topic);
+
+ if (topic.msgStatus(data) >= (tinode_sdk__WEBPACK_IMPORTED_MODULE_5___default().MESSAGE_STATUS_SENT) && data.from != this.state.myUserId) {
+ clearTimeout(this.receivedTimer);
+ this.receivedTimer = setTimeout(() => {
+ this.receivedTimer = undefined;
+ topic.noteRecv(data.seq);
+ }, _config_js__WEBPACK_IMPORTED_MODULE_11__.RECEIVED_DELAY);
+ }
+ }
+
+ tnInitFind() {
+ const fnd = this.tinode.getFndTopic();
+ fnd.onSubsUpdated = this.tnFndSubsUpdated;
+
+ if (fnd.isSubscribed()) {
+ this.tnFndSubsUpdated();
+ } else {
+ fnd.subscribe(fnd.startMetaQuery().withSub().build()).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+ }
+
+ tnFndSubsUpdated() {
+ const foundContacts = [];
+ this.tinode.getFndTopic().contacts(s => {
+ foundContacts.push(s);
+ });
+ this.setState({
+ searchResults: foundContacts,
+ searchableContacts: TinodeWeb.prepareSearchableContacts(this.state.chatList, foundContacts)
+ });
+ }
+
+ handleSearchContacts(query) {
+ const fnd = this.tinode.getFndTopic();
+ fnd.setMeta({
+ desc: {
+ public: query
+ }
+ }).then(ctrl => {
+ return fnd.getMeta(fnd.startMetaQuery().withSub().build());
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+
+ handleTopicSelected(topicName) {
+ if (this.state.newTopicParams && this.state.newTopicParams._topicName != topicName) {
+ this.setState({
+ newTopicParams: null
+ });
+ }
+
+ if (topicName) {
+ this.setState({
+ errorText: '',
+ errorLevel: null,
+ mobilePanel: 'topic-view',
+ showInfoPanel: false
+ });
+
+ if (this.state.topicSelected != topicName) {
+ this.setState({
+ topicSelectedOnline: this.tinode.isTopicOnline(topicName),
+ topicSelectedAcs: this.tinode.getTopicAccessMode(topicName)
+ });
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.setUrlTopic('', topicName));
+ }
+ } else {
+ this.setState({
+ errorText: '',
+ errorLevel: null,
+ mobilePanel: 'sidepanel',
+ topicSelectedOnline: false,
+ topicSelectedAcs: null,
+ showInfoPanel: false
+ });
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.setUrlTopic('', null));
+ }
+ }
+
+ handleHideMessagesView() {
+ this.setState({
+ mobilePanel: 'sidepanel'
+ });
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.setUrlTopic(window.location.hash, null));
+ }
+
+ handleSendMessage(msg, promise, uploader) {
+ const topic = this.tinode.getTopic(this.state.topicSelected);
+ msg = topic.createMessage(msg, false);
+ msg._uploader = uploader;
+
+ if (!topic.isSubscribed()) {
+ if (!promise) {
+ promise = Promise.resolve();
+ }
+
+ promise = promise.then(() => {
+ return topic.subscribe();
+ });
+ }
+
+ if (promise) {
+ promise = promise.catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+
+ topic.publishDraft(msg, promise).then(ctrl => {
+ if (topic.isArchived()) {
+ return topic.archive(false);
+ }
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+
+ handleNewChatInvitation(topicName, action) {
+ const topic = this.tinode.getTopic(topicName);
+ let response = null;
+
+ switch (action) {
+ case 'accept':
+ const mode = topic.getAccessMode().getGiven();
+ response = topic.setMeta({
+ sub: {
+ mode: mode
+ }
+ });
+
+ if (topic.isP2P()) {
+ response = response.then(ctrl => {
+ topic.setMeta({
+ sub: {
+ user: topicName,
+ mode: mode
+ }
+ });
+ });
+ }
+
+ break;
+
+ case 'delete':
+ response = topic.delTopic(true);
+ break;
+
+ case 'block':
+ const am = topic.getAccessMode().updateWant('-JP').getWant();
+ response = topic.setMeta({
+ sub: {
+ mode: am
+ }
+ }).then(ctrl => {
+ return this.handleTopicSelected(null);
+ });
+ break;
+
+ default:
+ console.log("Unknown invitation action", '"' + action + '""');
+ }
+
+ if (response != null) {
+ response.catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+ }
+
+ handleNewAccount() {
+ this.handleError();
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.setUrlSidePanel(window.location.hash, 'register'));
+ }
+
+ handleNewAccountRequest(login_, password_, public_, cred_, tags_) {
+ this.handleError();
+ this.tinode.connect(this.state.serverAddress).then(() => {
+ return this.tinode.createAccountBasic(login_, password_, {
+ public: public_,
+ tags: tags_,
+ cred: tinode_sdk__WEBPACK_IMPORTED_MODULE_5___default().credential(cred_)
+ });
+ }).then(ctrl => {
+ if (ctrl.code >= 300 && ctrl.text == 'validate credentials') {
+ this.handleCredentialsRequest(ctrl.params);
+ } else {
+ this.handleLoginSuccessful(this);
+ }
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+
+ handleUpdateAccountRequest(password, pub, defacs) {
+ this.handleError();
+
+ if (pub || defacs) {
+ const params = {};
+
+ if (pub) {
+ params.public = pub;
+ }
+
+ if (defacs) {
+ params.defacs = defacs;
+ }
+
+ this.tinode.getMeTopic().setMeta({
+ desc: params
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+
+ if (password) {
+ this.tinode.updateAccountBasic(null, this.tinode.getCurrentLogin(), password).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+ }
+
+ handleToggleIncognitoMode(on) {
+ const me = this.tinode.getMeTopic();
+ const am = me.getAccessMode().updateWant(on ? '-P' : '+P').getWant();
+ me.setMeta({
+ sub: {
+ mode: am
+ }
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+
+ handleUpdateAccountTagsRequest(tags) {
+ this.tinode.getMeTopic().setMeta({
+ tags: tags
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+
+ handleSettings() {
+ this.handleError();
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.setUrlSidePanel(window.location.hash, this.state.myUserId ? 'edit' : 'settings'));
+ }
+
+ handleGlobalSettings(settings) {
+ const serverAddress = settings.serverAddress || this.state.serverAddress;
+ const transport = settings.transport || this.state.transport;
+
+ if (this.tinode) {
+ this.tinode.onDisconnect = undefined;
+ this.tinode.disconnect();
+ }
+
+ this.tinode = TinodeWeb.tnSetup(serverAddress, transport, this.props.intl.locale);
+ this.tinode.onConnect = this.handleConnected;
+ this.tinode.onDisconnect = this.handleDisconnect;
+ this.setState({
+ serverAddress: serverAddress,
+ transport: transport
+ });
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_14__.default.setObject('settings', {
+ serverAddress: serverAddress,
+ transport: transport
+ });
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.setUrlSidePanel(window.location.hash, ''));
+ }
+
+ handleShowArchive() {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.setUrlSidePanel(window.location.hash, this.state.myUserId ? 'archive' : ''));
+ }
+
+ handleShowBlocked() {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.setUrlSidePanel(window.location.hash, this.state.myUserId ? 'blocked' : ''));
+ }
+
+ initDesktopAlerts() {
+ this.fbPush.onTokenRefresh(() => {
+ this.requestPushToken();
+ });
+ this.fbPush.onMessage(payload => {});
+ }
+
+ togglePushToken(enabled) {
+ if (enabled) {
+ if (!this.state.firebaseToken) {
+ this.fbPush.requestPermission().then(() => {
+ this.requestPushToken();
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ this.setState({
+ desktopAlerts: false,
+ firebaseToken: null
+ });
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_14__.default.updateObject('settings', {
+ desktopAlerts: false
+ });
+ console.log("Failed to get permission to notify.", err);
+ });
+ } else {
+ this.setState({
+ desktopAlerts: true
+ });
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_14__.default.updateObject('settings', {
+ desktopAlerts: true
+ });
+ }
+ } else if (this.state.firebaseToken) {
+ this.fbPush.deleteToken(this.state.firebaseToken).catch(err => {
+ console.log("Unable to delete token.", err);
+ }).finally(() => {
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_14__.default.updateObject('settings', {
+ desktopAlerts: false
+ });
+ localStorage.removeItem('firebase-token');
+ this.setState({
+ desktopAlerts: false,
+ firebaseToken: null
+ });
+ });
+ } else {
+ this.setState({
+ desktopAlerts: false,
+ firebaseToken: null
+ });
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_14__.default.updateObject('settings', {
+ desktopAlerts: false
+ });
+ }
+ }
+
+ requestPushToken() {
+ this.fbPush.getToken().then(refreshedToken => {
+ if (refreshedToken != this.state.firebaseToken) {
+ this.tinode.setDeviceToken(refreshedToken, true);
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_14__.default.setObject('firebase-token', refreshedToken);
+ }
+
+ this.setState({
+ firebaseToken: refreshedToken,
+ desktopAlerts: true
+ });
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_14__.default.updateObject('settings', {
+ desktopAlerts: true
+ });
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ console.log("Failed to retrieve firebase token", err);
+ });
+ }
+
+ handleToggleMessageSounds(enabled) {
+ this.setState({
+ messageSounds: enabled
+ });
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_14__.default.updateObject('settings', {
+ messageSoundsOff: !enabled
+ });
+ }
+
+ handleCredAdd(method, value) {
+ const me = this.tinode.getMeTopic();
+ me.setMeta({
+ cred: {
+ meth: method,
+ val: value
+ }
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+
+ handleCredDelete(method, value) {
+ const me = this.tinode.getMeTopic();
+ me.delCredential(method, value).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+
+ handleCredConfirm(method, response) {
+ this.handleCredentialsRequest({
+ cred: [method]
+ });
+ }
+
+ handleSidepanelCancel() {
+ const parsed = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.parseUrlHash(window.location.hash);
+ let path = '';
+
+ if (['security', 'support', 'general', 'notif'].includes(parsed.path[0])) {
+ path = 'edit';
+ } else if ('blocked' == parsed.path[0]) {
+ path = 'security';
+ } else if (this.state.myUserId) {
+ path = 'contacts';
+ }
+
+ parsed.path[0] = path;
+
+ if (parsed.params) {
+ delete parsed.params.code;
+ delete parsed.params.method;
+ delete parsed.params.tab;
+ }
+
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.composeUrlHash(parsed.path, parsed.params));
+ this.setState({
+ errorText: '',
+ errorLevel: null
+ });
+ }
+
+ basicNavigator(hash) {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.setUrlSidePanel(window.location.hash, hash));
+ }
+
+ handleStartTopicRequest(topicName, pub, priv, tags, isChannel) {
+ if (topicName && this.tinode.isTopicCached(topicName)) {
+ this.handleTopicSelected(topicName);
+ return;
+ }
+
+ const params = {};
+
+ if (tinode_sdk__WEBPACK_IMPORTED_MODULE_5___default().isP2PTopicName(topicName)) {
+ params.sub = {
+ mode: _config_js__WEBPACK_IMPORTED_MODULE_11__.DEFAULT_P2P_ACCESS_MODE
+ };
+ params.desc = {
+ defacs: {
+ auth: _config_js__WEBPACK_IMPORTED_MODULE_11__.DEFAULT_P2P_ACCESS_MODE
+ }
+ };
+ } else {
+ topicName = topicName || this.tinode.newGroupTopicName(isChannel);
+ params.desc = {
+ public: pub,
+ private: {
+ comment: priv
+ }
+ };
+ params.tags = tags;
+ }
+
+ params._topicName = topicName;
+ this.setState({
+ newTopicParams: params
+ }, () => {
+ this.handleTopicSelected(topicName);
+ });
+ }
+
+ handleNewTopicCreated(oldName, newName) {
+ if (this.state.topicSelected == oldName && oldName != newName) {
+ this.setState({
+ topicSelected: newName
+ }, () => {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.setUrlTopic('', newName));
+ });
+ }
+ }
+
+ handleTopicUpdateRequest(topicName, pub, priv, permissions) {
+ const topic = this.tinode.getTopic(topicName);
+
+ if (topic) {
+ const params = {};
+
+ if (pub) {
+ params.public = pub;
+ }
+
+ if (priv) {
+ params.private = priv === (tinode_sdk__WEBPACK_IMPORTED_MODULE_5___default().DEL_CHAR) ? (tinode_sdk__WEBPACK_IMPORTED_MODULE_5___default().DEL_CHAR) : {
+ comment: priv
+ };
+ }
+
+ if (permissions) {
+ params.defacs = permissions;
+ }
+
+ topic.setMeta({
+ desc: params
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+ }
+
+ handleChangePermissions(topicName, mode, uid) {
+ const topic = this.tinode.getTopic(topicName);
+
+ if (topic) {
+ const am = topic.getAccessMode();
+
+ if (uid) {
+ am.updateGiven(mode);
+ mode = am.getGiven();
+ } else {
+ am.updateWant(mode);
+ mode = am.getWant();
+ }
+
+ topic.setMeta({
+ sub: {
+ user: uid,
+ mode: mode
+ }
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+ }
+
+ handleTagsUpdated(topicName, tags) {
+ const topic = this.tinode.getTopic(topicName);
+
+ if (topic) {
+ topic.setMeta({
+ tags: tags
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+ }
+
+ handleLogout() {
+ (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_17__.updateFavicon)(0);
+ localStorage.removeItem('auth-token');
+ localStorage.removeItem('firebase-token');
+ localStorage.removeItem('settings');
+
+ if (this.state.firebaseToken) {
+ this.fbPush.deleteToken(this.state.firebaseToken);
+ }
+
+ if (this.tinode) {
+ this.tinode.onDisconnect = undefined;
+ this.tinode.disconnect();
+ }
+
+ this.setState(this.getBlankState());
+ this.tinode = TinodeWeb.tnSetup(this.state.serverAddress, this.state.transport, this.props.intl.locale);
+ this.tinode.onConnect = this.handleConnected;
+ this.tinode.onDisconnect = this.handleDisconnect;
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo('');
+ }
+
+ handleDeleteAccount() {
+ this.tinode.delCurrentUser(true).then(ctrl => {
+ this.handleLogout();
+ });
+ }
+
+ handleDeleteMessagesRequest(topicName) {
+ const topic = this.tinode.getTopic(topicName);
+
+ if (!topic) {
+ return;
+ }
+
+ topic.delMessagesAll(true).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+
+ handleLeaveUnsubRequest(topicName) {
+ const topic = this.tinode.getTopic(topicName);
+
+ if (!topic) {
+ return;
+ }
+
+ topic.leave(true).then(ctrl => {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.setUrlTopic(window.location.hash, ''));
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+
+ handleBlockTopicRequest(topicName) {
+ const topic = this.tinode.getTopic(topicName);
+
+ if (!topic) {
+ return;
+ }
+
+ topic.updateMode(null, '-JP').then(ctrl => {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.setUrlTopic(window.location.hash, ''));
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+
+ handleReportTopic(topicName) {
+ const topic = this.tinode.getTopic(topicName);
+
+ if (!topic) {
+ return;
+ }
+
+ this.tinode.publish((tinode_sdk__WEBPACK_IMPORTED_MODULE_5___default().TOPIC_SYS), tinode_sdk__WEBPACK_IMPORTED_MODULE_5___default().Drafty.attachJSON(null, {
+ 'action': 'report',
+ 'target': topicName
+ }));
+ topic.updateMode(null, '-JP').then(ctrl => {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.setUrlTopic(window.location.hash, ''));
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+
+ handleShowContextMenu(params, menuItems) {
+ this.setState({
+ contextMenuVisible: true,
+ contextMenuClickAt: {
+ x: params.x,
+ y: params.y
+ },
+ contextMenuParams: params,
+ contextMenuItems: menuItems || this.defaultTopicContextMenu(params.topicName),
+ contextMenuBounds: react_dom__WEBPACK_IMPORTED_MODULE_1___default().findDOMNode(this).getBoundingClientRect()
+ });
+ }
+
+ defaultTopicContextMenu(topicName) {
+ const topic = this.tinode.getTopic(topicName);
+ let muted = false,
+ blocked = false,
+ self_blocked = false,
+ subscribed = false,
+ deleter = false,
+ archived = false;
+
+ if (topic) {
+ subscribed = topic.isSubscribed();
+ archived = topic.isArchived();
+ const acs = topic.getAccessMode();
+
+ if (acs) {
+ muted = acs.isMuted();
+ blocked = !acs.isJoiner();
+ self_blocked = !acs.isJoiner('want');
+ deleter = acs.isDeleter();
+ }
+ }
+
+ return [subscribed ? {
+ title: this.props.intl.formatMessage(messages.menu_item_info),
+ handler: this.handleShowInfoView
+ } : null, subscribed ? 'messages_clear' : null, subscribed && deleter ? 'messages_clear_hard' : null, muted ? blocked ? null : 'topic_unmute' : 'topic_mute', self_blocked ? 'topic_unblock' : 'topic_block', !archived ? 'topic_archive' : null, 'topic_delete'];
+ }
+
+ handleHideContextMenu() {
+ this.setState({
+ contextMenuVisible: false,
+ contextMenuClickAt: null,
+ contextMenuParams: null,
+ contextMenuBounds: null
+ });
+ }
+
+ handleContextMenuAction(action, promise, params) {
+ if (action == 'topic_archive') {
+ if (promise && params.topicName && params.topicName == this.state.topicSelected) {
+ promise.then(() => {
+ this.handleTopicSelected(null);
+ });
+ }
+ }
+ }
+
+ handleShowAlert(title, content, onConfirm, confirmText, onReject, rejectText) {
+ this.setState({
+ alertVisible: true,
+ alertParams: {
+ title: title,
+ content: content,
+ onConfirm: onConfirm,
+ confirm: confirmText,
+ onReject: onReject,
+ reject: rejectText
+ }
+ });
+ }
+
+ handleShowInfoView() {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.addUrlParam(window.location.hash, 'info', true));
+ this.setState({
+ showInfoPanel: true
+ });
+ }
+
+ handleHideInfoView() {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.removeUrlParam(window.location.hash, 'info'));
+ this.setState({
+ showInfoPanel: false
+ });
+ }
+
+ handleMemberUpdateRequest(topicName, added, removed) {
+ if (!topicName) {
+ return;
+ }
+
+ const topic = this.tinode.getTopic(topicName);
+
+ if (!topic) {
+ return;
+ }
+
+ if (added && added.length > 0) {
+ added.map(uid => {
+ topic.invite(uid, null).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ });
+ }
+
+ if (removed && removed.length > 0) {
+ removed.map(uid => {
+ topic.delSubscription(uid).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ });
+ }
+ }
+
+ handleValidateCredentialsRequest(cred, code) {
+ if (this.tinode.isAuthenticated()) {
+ const me = this.tinode.getMeTopic();
+ me.setMeta({
+ cred: {
+ meth: cred,
+ resp: code
+ }
+ }).then(() => {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_15__.default.navigateTo('');
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ } else {
+ this.setState({
+ credMethod: cred,
+ credCode: code
+ });
+ this.doLogin(null, null, {
+ meth: cred,
+ resp: code
+ });
+ }
+ }
+
+ handlePasswordResetRequest(method, value) {
+ this.tinode.connect().then(() => {
+ return this.tinode.requestResetAuthSecret('basic', method, value);
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+
+ handleResetPassword(scheme, newPassword, token) {
+ token = (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_12__.base64ReEncode)(token);
+
+ if (!token) {
+ this.handleError(this.props.intl.formatMessage(messages.invalid_security_token), 'err');
+ } else {
+ this.tinode.connect().then(() => {
+ return this.tinode.updateAccountBasic(null, null, newPassword, {
+ token: token
+ });
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+ }
+
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "app-container"
+ }, this.state.contextMenuVisible ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_context_menu_jsx__WEBPACK_IMPORTED_MODULE_7__.default, {
+ tinode: this.tinode,
+ bounds: this.state.contextMenuBounds,
+ clickAt: this.state.contextMenuClickAt,
+ params: this.state.contextMenuParams,
+ items: this.state.contextMenuItems,
+ hide: this.handleHideContextMenu,
+ onShowAlert: this.handleShowAlert,
+ onAction: this.handleContextMenuAction,
+ onTopicRemoved: topicName => {
+ if (topicName == this.state.topicSelected) {
+ this.handleTopicSelected(null);
+ }
+ },
+ onError: this.handleError
+ }) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_alert_jsx__WEBPACK_IMPORTED_MODULE_6__.default, {
+ visible: this.state.alertVisible,
+ title: this.state.alertParams.title,
+ content: this.state.alertParams.content,
+ onReject: this.state.alertParams.onReject ? () => {
+ this.setState({
+ alertVisible: false
+ });
+ } : null,
+ reject: this.state.alertParams.reject,
+ onConfirm: () => {
+ this.setState({
+ alertVisible: false
+ });
+ this.state.alertParams.onConfirm();
+ },
+ confirm: this.state.alertParams.confirm
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_sidepanel_view_jsx__WEBPACK_IMPORTED_MODULE_10__.default, {
+ tinode: this.tinode,
+ connected: this.state.connected,
+ displayMobile: this.state.displayMobile,
+ hideSelf: this.state.displayMobile && this.state.mobilePanel !== 'sidepanel',
+ state: this.state.sidePanelSelected,
+ title: this.state.sidePanelTitle,
+ avatar: this.state.sidePanelAvatar,
+ login: this.state.login,
+ myUserId: this.state.myUserId,
+ loginDisabled: this.state.loginDisabled,
+ loadSpinnerVisible: this.state.loadSpinnerVisible,
+ errorText: this.state.errorText,
+ errorLevel: this.state.errorLevel,
+ errorAction: this.state.errorAction,
+ errorActionText: this.state.errorActionText,
+ topicSelected: this.state.topicSelected,
+ chatList: this.state.chatList,
+ credMethod: this.state.credMethod,
+ credCode: this.state.credCode,
+ transport: this.state.transport,
+ messageSounds: this.state.messageSounds,
+ desktopAlerts: this.state.desktopAlerts,
+ desktopAlertsEnabled: this.state.desktopAlertsEnabled,
+ incognitoMode: this.state.incognitoMode,
+ serverAddress: this.state.serverAddress,
+ serverVersion: this.state.serverVersion,
+ onGlobalSettings: this.handleGlobalSettings,
+ onSignUp: this.handleNewAccount,
+ onSettings: this.handleSettings,
+ onBasicNavigate: this.basicNavigator,
+ onLoginRequest: this.handleLoginRequest,
+ onCreateAccount: this.handleNewAccountRequest,
+ onUpdateAccount: this.handleUpdateAccountRequest,
+ onUpdateAccountTags: this.handleUpdateAccountTagsRequest,
+ onTogglePushNotifications: this.togglePushToken,
+ onToggleMessageSounds: this.handleToggleMessageSounds,
+ onToggleIncognitoMode: this.handleToggleIncognitoMode,
+ onCredAdd: this.handleCredAdd,
+ onCredDelete: this.handleCredDelete,
+ onCredConfirm: this.handleCredConfirm,
+ onTopicSelected: this.handleTopicSelected,
+ onCreateTopic: this.handleStartTopicRequest,
+ onLogout: this.handleLogout,
+ onDeleteAccount: this.handleDeleteAccount,
+ onShowAlert: this.handleShowAlert,
+ onCancel: this.handleSidepanelCancel,
+ onError: this.handleError,
+ onValidateCredentials: this.handleValidateCredentialsRequest,
+ onPasswordResetRequest: this.handlePasswordResetRequest,
+ onResetPassword: this.handleResetPassword,
+ onShowArchive: this.handleShowArchive,
+ onShowBlocked: this.handleShowBlocked,
+ onInitFind: this.tnInitFind,
+ searchResults: this.state.searchResults,
+ onSearchContacts: this.handleSearchContacts,
+ showContextMenu: this.handleShowContextMenu
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_messages_view_jsx__WEBPACK_IMPORTED_MODULE_9__.default, {
+ tinode: this.tinode,
+ connected: this.state.connected,
+ ready: this.state.ready,
+ online: this.state.topicSelectedOnline,
+ acs: this.state.topicSelectedAcs,
+ displayMobile: this.state.displayMobile,
+ viewportWidth: this.state.viewportWidth,
+ viewportHeight: this.state.viewportHeight,
+ hideSelf: this.state.displayMobile && (this.state.mobilePanel !== 'topic-view' || this.state.showInfoPanel),
+ topic: this.state.topicSelected,
+ myUserId: this.state.myUserId,
+ serverVersion: this.state.serverVersion,
+ serverAddress: this.state.serverAddress,
+ applicationVisible: this.state.applicationVisible,
+ errorText: this.state.errorText,
+ errorLevel: this.state.errorLevel,
+ errorAction: this.state.errorAction,
+ errorActionText: this.state.errorActionText,
+ newTopicParams: this.state.newTopicParams,
+ onHideMessagesView: this.handleHideMessagesView,
+ onData: this.tnData,
+ onError: this.handleError,
+ onNewTopicCreated: this.handleNewTopicCreated,
+ showContextMenu: this.handleShowContextMenu,
+ onChangePermissions: this.handleChangePermissions,
+ onNewChat: this.handleNewChatInvitation,
+ sendMessage: this.handleSendMessage
+ }), this.state.showInfoPanel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_info_view_jsx__WEBPACK_IMPORTED_MODULE_8__.default, {
+ tinode: this.tinode,
+ connected: this.state.connected,
+ displayMobile: this.state.displayMobile,
+ topic: this.state.topicSelected,
+ searchableContacts: this.state.searchableContacts,
+ myUserId: this.state.myUserId,
+ errorText: this.state.errorText,
+ errorLevel: this.state.errorLevel,
+ errorAction: this.state.errorAction,
+ errorActionText: this.state.errorActionText,
+ onTopicDescUpdate: this.handleTopicUpdateRequest,
+ onCancel: this.handleHideInfoView,
+ onShowAlert: this.handleShowAlert,
+ onChangePermissions: this.handleChangePermissions,
+ onMemberUpdateRequest: this.handleMemberUpdateRequest,
+ onDeleteMessages: this.handleDeleteMessagesRequest,
+ onLeaveTopic: this.handleLeaveUnsubRequest,
+ onBlockTopic: this.handleBlockTopicRequest,
+ onReportTopic: this.handleReportTopic,
+ onAddMember: this.handleManageGroupMembers,
+ onTopicTagsUpdate: this.handleTagsUpdated,
+ onInitFind: this.tnInitFind,
+ onError: this.handleError,
+ showContextMenu: this.handleShowContextMenu
+ }) : null);
+ }
+
+}
+
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_2__.injectIntl)(TinodeWeb));
+
+/***/ }),
+
+/***/ "./src/views/validation-view.jsx":
+/*!***************************************!*\
+ !*** ./src/views/validation-view.jsx ***!
+ \***************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ phone: {
+ "id": "phone_dative",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "phone"
+ }]
+ },
+ email: {
+ "id": "email_dative",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "email"
+ }]
+ }
+});
+
+class ValidationView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ code: props.credCode || ''
+ };
+ this.handleChange = this.handleChange.bind(this);
+ this.handleKeyPress = this.handleKeyPress.bind(this);
+ this.handleSubmit = this.handleSubmit.bind(this);
+ this.handleCancel = this.handleCancel.bind(this);
+ }
+
+ handleChange(e) {
+ this.setState({
+ code: e.target.value
+ });
+ }
+
+ handleKeyPress(e) {
+ if (e.key === 'Enter') {
+ this.handleSubmit(e);
+ } else if (e.key == 'Escape') {
+ this.handleCancel(e);
+ }
+ }
+
+ handleSubmit(e) {
+ e.preventDefault();
+
+ if (this.state.code && this.state.code.trim()) {
+ this.props.onSubmit(this.props.credMethod, this.state.code.trim());
+ }
+ }
+
+ handleCancel(e) {
+ e.preventDefault();
+ this.props.onCancel();
+ }
+
+ render() {
+ const {
+ formatMessage
+ } = this.props.intl;
+ const methods = {
+ 'email': formatMessage(messages.email),
+ 'tel': formatMessage(messages.phone)
+ };
+ let method = methods[this.props.credMethod] || this.props.credMethod;
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small",
+ htmlFor: "enter-confirmation-code"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "enter_confirmation_code_prompt",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Enter confirmation code sent to you by "
+ }, {
+ "type": 1,
+ "value": "method"
+ }, {
+ "type": 0,
+ "value": ":"
+ }],
+ values: {
+ method: method
+ }
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "numeric_confirmation_code_prompt",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Numbers only"
+ }]
+ }, numbers_only => react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
+ type: "text",
+ id: "enter-confirmation-code",
+ placeholder: numbers_only,
+ value: this.state.code,
+ onChange: this.handleChange,
+ onKeyPress: this.handleKeyPress,
+ required: true
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "dialog-buttons"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
+ className: "blue",
+ onClick: this.handleSubmit
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_confirm",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Confirm"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
+ className: "white",
+ onClick: this.handleCancel
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_cancel",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Cancel"
+ }]
+ }))));
+ }
+
+}
+
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(ValidationView));
+
+/***/ }),
+
+/***/ "./src/widgets/alert.jsx":
+/*!*******************************!*\
+ !*** ./src/widgets/alert.jsx ***!
+ \*******************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ Alert; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+
+
+class Alert extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ return this.props.visible ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "alert-container"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "alert"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "title"
+ }, this.props.title), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "content"
+ }, this.props.content), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "dialog-buttons"
+ }, this.props.onReject ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
+ className: "outline",
+ onClick: this.props.onReject
+ }, this.props.reject || react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_cancel",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Cancel"
+ }]
+ })) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
+ className: "blue",
+ onClick: this.props.onConfirm
+ }, this.props.confirm || react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_ok",
+ defaultMessage: [{
+ "type": 0,
+ "value": "OK"
+ }]
+ }))))) : null;
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/attachment.jsx":
+/*!************************************!*\
+ !*** ./src/widgets/attachment.jsx ***!
+ \************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ Attachment; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _file_progress_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./file-progress.jsx */ "./src/widgets/file-progress.jsx");
+/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
+/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
+
+
+
+
+
+class Attachment extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ downloader: null,
+ progress: 0
+ };
+ this.downloadFile = this.downloadFile.bind(this);
+ this.handleCancel = this.handleCancel.bind(this);
+ }
+
+ downloadFile(url, filename, mimetype) {
+ if (!url) {
+ this.props.onError("Invalid download URL '" + url + "'");
+ return;
+ }
+
+ const downloader = this.props.tinode.getLargeFileHelper();
+ this.setState({
+ downloader: downloader
+ });
+ downloader.download(url, filename, mimetype, loaded => {
+ this.setState({
+ progress: loaded / this.props.size
+ });
+ }, err => {
+ this.props.onError(err, 'err');
+ }).then(() => {
+ this.setState({
+ downloader: null,
+ progress: 0
+ });
+ }).catch(err => {
+ if (err) {
+ this.props.onError("Error downloading file: " + err.message, 'err');
+ }
+
+ this.setState({
+ downloader: null,
+ progress: 0
+ });
+ });
+ }
+
+ handleCancel() {
+ if (this.props.uploading) {
+ this.props.onCancelUpload();
+ } else if (this.state.downloader) {
+ this.state.downloader.cancel();
+ }
+ }
+
+ render() {
+ let filename = this.props.filename || 'file_attachment';
+
+ if (filename.length > 36) {
+ filename = filename.substr(0, 16) + '...' + filename.substr(-16);
+ }
+
+ let size = this.props.size > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
+ className: "small gray"
+ }, "(", (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_3__.bytesToHumanSize)(this.props.size), ")") : null;
+ let url, helperFunc;
+
+ if (!this.props.uploading && !this.state.downloader && (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_4__.isUrlRelative)(this.props.downloadUrl)) {
+ url = '#';
+
+ helperFunc = e => {
+ e.preventDefault();
+ this.downloadFile(this.props.downloadUrl, this.props.filename, this.props.mimetype);
+ };
+ } else {
+ url = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_4__.sanitizeUrl)(this.props.downloadUrl);
+ helperFunc = null;
+ }
+
+ const downloadWidget = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "file_download"), " ", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "save_attachment",
+ defaultMessage: [{
+ "type": 0,
+ "value": "save"
+ }]
+ }));
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "attachment"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons big gray"
+ }, "insert_drive_file")), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "flex-column"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, filename, " ", size), this.props.uploading || this.state.downloader ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_file_progress_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ progress: this.props.uploading ? this.props.progress : this.state.progress,
+ onCancel: this.handleCancel
+ }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, url ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: url,
+ download: this.props.filename,
+ onClick: helperFunc
+ }, downloadWidget) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
+ className: "light-gray"
+ }, downloadWidget))));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/avatar-upload.jsx":
+/*!***************************************!*\
+ !*** ./src/widgets/avatar-upload.jsx ***!
+ \***************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ AvatarUpload; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
+
+
+
+
+class AvatarUpload extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ dataUrl: props.avatar
+ };
+ this.handleFileUpload = this.handleFileUpload.bind(this);
+ }
+
+ componentDidUpdate(prevProps) {
+ if (this.props.avatar != prevProps.avatar) {
+ this.setState({
+ dataUrl: this.props.avatar
+ });
+ }
+ }
+
+ handleFileUpload(e) {
+ (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_3__.imageScaled)(e.target.files[0], _config_js__WEBPACK_IMPORTED_MODULE_2__.AVATAR_SIZE, _config_js__WEBPACK_IMPORTED_MODULE_2__.AVATAR_SIZE, _config_js__WEBPACK_IMPORTED_MODULE_2__.MAX_EXTERN_ATTACHMENT_SIZE, true, (mime, blob) => {
+ (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_3__.blobToBase64)(blob, (unused, base64bits) => {
+ const du = (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_3__.makeImageUrl)({
+ data: base64bits,
+ type: mime
+ });
+ this.setState({
+ dataUrl: du
+ });
+ this.props.onImageChanged(du);
+ });
+ }, err => {
+ this.props.onError(err, 'err');
+ });
+ e.target.value = '';
+ }
+
+ render() {
+ const randId = 'file-input-avatar-' + (Math.random() + '').substr(2);
+ const className = 'avatar-upload' + (this.props.readOnly ? ' read-only' : '');
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: className
+ }, this.props.readOnly || !this.state.dataUrl ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ className: "clear-avatar",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onImageChanged(null);
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "clear")), this.state.dataUrl ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("img", {
+ src: this.state.dataUrl,
+ className: "preview"
+ }) : this.props.readOnly && this.props.uid ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "avatar-box"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__.default, {
+ avatar: true,
+ topic: this.props.uid,
+ title: this.props.title
+ })) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "blank"
+ }, _config_js__WEBPACK_IMPORTED_MODULE_2__.AVATAR_SIZE, "\xD7", _config_js__WEBPACK_IMPORTED_MODULE_2__.AVATAR_SIZE), this.props.readOnly ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
+ type: "file",
+ id: randId,
+ className: "inputfile hidden",
+ accept: "image/*",
+ onChange: this.handleFileUpload
+ }), this.props.readOnly ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ htmlFor: randId,
+ className: "round"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "file_upload")));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/button-back.jsx":
+/*!*************************************!*\
+ !*** ./src/widgets/button-back.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ ButtonBack; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+
+class ButtonBack extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onBack();
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "arrow_back"));
+ }
+
+}
+
+/***/ }),
+
+/***/ "./src/widgets/chat-message.jsx":
+/*!**************************************!*\
+ !*** ./src/widgets/chat-message.jsx ***!
+ \**************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ ChatMessage; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _attachment_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./attachment.jsx */ "./src/widgets/attachment.jsx");
+/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
+/* harmony import */ var _received_marker_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./received-marker.jsx */ "./src/widgets/received-marker.jsx");
+/* harmony import */ var _uploading_image_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./uploading-image.jsx */ "./src/widgets/uploading-image.jsx");
+/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
+
+
+
+
+
+
+
+
+class ChatMessage extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ progress: 0
+ };
+
+ if (props.uploader) {
+ props.uploader.onProgress = this.handleProgress.bind(this);
+ }
+
+ this.handleImagePreview = this.handleImagePreview.bind(this);
+ this.handleFormButtonClick = this.handleFormButtonClick.bind(this);
+ this.handleContextClick = this.handleContextClick.bind(this);
+ this.handleCancelUpload = this.handleCancelUpload.bind(this);
+ }
+
+ handleImagePreview(e) {
+ e.preventDefault();
+ this.props.onImagePreview({
+ url: e.target.src,
+ filename: e.target.title,
+ width: e.target.dataset.width,
+ height: e.target.dataset.height,
+ size: e.target.dataset.size,
+ type: e.target.dataset.mime
+ });
+ }
+
+ handleFormButtonClick(e) {
+ e.preventDefault();
+ const data = {
+ seq: this.props.seq
+ };
+ data.resp = {};
+
+ if (e.target.dataset.name) {
+ data.resp[e.target.dataset.name] = e.target.dataset.val ? e.target.dataset.val : e.target.dataset.val === undefined ? 1 : '' + e.target.dataset.val;
+ }
+
+ if (e.target.dataset.act == 'url') {
+ data.ref = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_7__.sanitizeUrl)(e.target.dataset.ref) || 'about:blank';
+ }
+
+ const text = e.target.dataset.title || 'unknown';
+ this.props.onFormResponse(e.target.dataset.act, text, data);
+ }
+
+ handleContextClick(e) {
+ e.preventDefault();
+ e.stopPropagation();
+ const menuItems = this.props.received == Tinode.MESSAGE_STATUS_FAILED ? ['menu_item_send_retry'] : [];
+ this.props.showContextMenu({
+ seq: this.props.seq,
+ content: this.props.content,
+ y: e.pageY,
+ x: e.pageX
+ }, menuItems);
+ }
+
+ handleProgress(ratio) {
+ this.setState({
+ progress: ratio
+ });
+ }
+
+ handleCancelUpload() {
+ this.props.onCancelUpload(this.props.seq, this.props.uploader);
+ }
+
+ render() {
+ const sideClass = this.props.deleted ? 'center' : this.props.sequence + ' ' + (this.props.response ? 'left' : 'right');
+ const bubbleClass = this.props.sequence == 'single' || this.props.sequence == 'last' ? 'bubble tip' : 'bubble';
+ const avatar = this.props.deleted ? null : this.props.userAvatar || true;
+ const fullDisplay = this.props.userFrom && this.props.response && (this.props.sequence == 'single' || this.props.sequence == 'last');
+ let content = this.props.content;
+ const attachments = [];
+
+ if (this.props.mimeType == tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.getContentType() && tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isValid(content)) {
+ tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.attachments(content, function (att, i) {
+ if (att.mime == 'application/json') {
+ return;
+ }
+
+ attachments.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_attachment_jsx__WEBPACK_IMPORTED_MODULE_3__.default, {
+ tinode: this.props.tinode,
+ downloadUrl: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.getDownloadUrl(att),
+ filename: att.name,
+ uploading: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isProcessing(att),
+ mimetype: att.mime,
+ size: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.getEntitySize(att),
+ progress: this.state.progress,
+ onCancelUpload: this.handleCancelUpload,
+ onError: this.props.onError,
+ key: i
+ }));
+ }, this);
+ content = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.format(content, draftyFormatter, this));
+ } else if (this.props.deleted) {
+ content = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons gray"
+ }, "block"), " ", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "gray"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "deleted_content",
+ defaultMessage: [{
+ "type": 0,
+ "value": "content deleted"
+ }]
+ })));
+ } else if (typeof content != 'string') {
+ content = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons gray"
+ }, "error_outline"), " ", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "gray"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "invalid_content",
+ defaultMessage: [{
+ "type": 0,
+ "value": "invalid content"
+ }]
+ })));
+ }
+
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
+ className: sideClass
+ }, this.props.userFrom && this.props.response ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "avatar-box"
+ }, fullDisplay ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_4__.default, {
+ topic: this.props.userFrom,
+ title: this.props.userName,
+ avatar: avatar
+ }) : null) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: bubbleClass
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "message-content"
+ }, content, attachments, this.props.timestamp ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_received_marker_jsx__WEBPACK_IMPORTED_MODULE_5__.default, {
+ timestamp: this.props.timestamp,
+ received: this.props.received
+ }) : null), this.props.deleted || !this.props.showContextMenu ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
+ className: "menuTrigger"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: this.handleContextClick
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "expand_more")))), fullDisplay ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "author"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "user_not_found",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Not found"
+ }]
+ }, notFound => {
+ return this.props.userName || react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", null, notFound);
+ })) : null));
+ }
+
+}
+;
+
+
+
+function draftyFormatter(style, data, values, key) {
+ let el = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.tagName(style);
+
+ if (el) {
+ const attr = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.attrValue(style, data) || {};
+ attr.key = key;
+
+ switch (style) {
+ case 'IM':
+ if (data) {
+ attr.className = 'inline-image';
+ const dim = (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_9__.fitImageSize)(data.width, data.height, Math.min(this.props.viewportWidth - _config_js__WEBPACK_IMPORTED_MODULE_8__.REM_SIZE * 4, _config_js__WEBPACK_IMPORTED_MODULE_8__.REM_SIZE * 36), _config_js__WEBPACK_IMPORTED_MODULE_8__.REM_SIZE * 24, false) || {
+ dstWidth: _config_js__WEBPACK_IMPORTED_MODULE_8__.BROKEN_IMAGE_SIZE,
+ dstHeight: _config_js__WEBPACK_IMPORTED_MODULE_8__.BROKEN_IMAGE_SIZE
+ };
+ attr.style = {
+ width: dim.dstWidth + 'px',
+ height: dim.dstHeight + 'px'
+ };
+
+ if (!tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isProcessing(data)) {
+ attr.src = this.props.tinode.authorizeURL((0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_7__.sanitizeImageUrl)(attr.src));
+ attr.alt = data.name;
+
+ if (attr.src) {
+ attr.onClick = this.handleImagePreview;
+ attr.className += ' image-clickable';
+ } else {
+ attr.src = 'img/broken_image.png';
+ }
+ } else {
+ el = _uploading_image_jsx__WEBPACK_IMPORTED_MODULE_6__.default;
+ }
+ }
+
+ break;
+
+ case 'BN':
+ attr.onClick = this.handleFormButtonClick;
+ let inner = react__WEBPACK_IMPORTED_MODULE_0___default().Children.map(values, child => {
+ return typeof child == 'string' ? child : undefined;
+ });
+
+ if (!inner || inner.length == 0) {
+ inner = [attr.name];
+ }
+
+ attr['data-title'] = inner.join('');
+ break;
+
+ case 'FM':
+ attr.className = 'bot-form';
+ break;
+
+ case 'FE':
+ break;
+ }
+
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(el, attr, values);
+ } else {
+ return values;
+ }
+}
+
+;
+
+/***/ }),
+
+/***/ "./src/widgets/checkbox.jsx":
+/*!**********************************!*\
+ !*** ./src/widgets/checkbox.jsx ***!
+ \**********************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ CheckBox; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+
+class CheckBox extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.handleChange = this.handleChange.bind(this);
+ }
+
+ handleChange() {
+ this.props.onChange(this.props.name, !this.props.checked);
+ }
+
+ render() {
+ return this.props.onChange ? this.props.checked ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons blue clickable",
+ onClick: this.handleChange
+ }, "check_box") : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons blue clickable",
+ onClick: this.handleChange
+ }, "check_box_outline_blank") : this.props.checked ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "check_box") : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "check_box_outline_blank");
+ }
+
+}
+
+/***/ }),
+
+/***/ "./src/widgets/chip-input.jsx":
+/*!************************************!*\
+ !*** ./src/widgets/chip-input.jsx ***!
+ \************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ ChipInput; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _chip_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chip.jsx */ "./src/widgets/chip.jsx");
+/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
+
+
+
+class ChipInput extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.state = ChipInput.deriveStateFromProps(props);
+ this.state.input = '';
+ this.state.focused = false;
+ this.handleTextInput = this.handleTextInput.bind(this);
+ this.removeChipAt = this.removeChipAt.bind(this);
+ this.handleChipCancel = this.handleChipCancel.bind(this);
+ this.handleFocusGained = this.handleFocusGained.bind(this);
+ this.handleFocusLost = this.handleFocusLost.bind(this);
+ this.handleKeyDown = this.handleKeyDown.bind(this);
+ }
+
+ static deriveStateFromProps(props) {
+ return {
+ placeholder: props.chips ? '' : props.prompt,
+ sortedChips: ChipInput.sortChips(props.chips, props.staticMembers),
+ chipIndex: ChipInput.indexChips(props.chips)
+ };
+ }
+
+ componentDidUpdate(prevProps, prevState) {
+ if (prevProps.chips != this.props.chips || prevProps.staticMembers != this.props.staticMembers || prevProps.prompt != this.props.prompt) {
+ this.setState(ChipInput.deriveStateFromProps(this.props));
+ }
+
+ if (!prevState || this.props.chips.length > prevState.sortedChips.length) {
+ this.setState({
+ input: ''
+ });
+ }
+ }
+
+ static indexChips(chips) {
+ const index = {};
+ let count = 0;
+ chips.map(item => {
+ index[item.user] = count;
+ count++;
+ });
+ return index;
+ }
+
+ static sortChips(chips, keep) {
+ const required = [];
+ const normal = [];
+ chips.map(item => {
+ if (keep && keep.includes(item.user)) {
+ required.push(item);
+ } else {
+ normal.push(item);
+ }
+ });
+ return required.concat(normal);
+ }
+
+ handleTextInput(e) {
+ this.setState({
+ input: e.target.value
+ });
+
+ if (this.props.filterFunc) {
+ this.props.filterFunc(e.target.value);
+ }
+ }
+
+ removeChipAt(idx) {
+ const removed = this.state.sortedChips[idx];
+ this.props.onChipRemoved(removed.user, this.state.chipIndex[removed.user]);
+ }
+
+ handleChipCancel(item, idx) {
+ this.removeChipAt(idx);
+ }
+
+ handleFocusGained() {
+ this.setState({
+ focused: true
+ });
+ }
+
+ handleFocusLost() {
+ this.setState({
+ focused: false
+ });
+
+ if (this.props.onFocusLost) {
+ this.props.onFocusLost(this.state.input);
+ }
+ }
+
+ handleKeyDown(e) {
+ if (e.key === 'Backspace') {
+ if (this.state.input.length == 0 && this.state.sortedChips.length > 0) {
+ const at = this.state.sortedChips.length - 1;
+
+ if (this.state.sortedChips[at].user !== this.props.staticMembers) {
+ this.removeChipAt(at);
+ }
+ }
+ } else if (e.key === 'Enter') {
+ if (this.props.onEnter) {
+ this.props.onEnter(this.state.input);
+ }
+ } else if (e.key === 'Escape') {
+ if (this.props.onCancel) {
+ this.props.onCancel();
+ }
+ }
+ }
+
+ render() {
+ const chips = [];
+ let count = 0;
+ const staticMembers = this.props.staticMembers || [];
+ this.state.sortedChips.map(item => {
+ chips.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_chip_jsx__WEBPACK_IMPORTED_MODULE_1__.default, {
+ onCancel: this.handleChipCancel,
+ avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_2__.makeImageUrl)(item.public ? item.public.photo : null),
+ title: item.public ? item.public.fn : undefined,
+ noAvatar: this.props.avatarDisabled,
+ topic: item.user,
+ required: staticMembers.includes(item.user),
+ invalid: item.invalid,
+ index: count,
+ key: item.user
+ }));
+ count++;
+ });
+ const className = "chip-input" + (this.state.focused ? ' focused' : '');
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: className
+ }, chips, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
+ type: "text",
+ placeholder: this.state.placeholder,
+ onChange: this.handleTextInput,
+ onFocus: this.handleFocusGained,
+ onBlur: this.handleFocusLost,
+ onKeyDown: this.handleKeyDown,
+ value: this.state.input,
+ autoFocus: true
+ }));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/chip.jsx":
+/*!******************************!*\
+ !*** ./src/widgets/chip.jsx ***!
+ \******************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ Chip; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
+
+
+class Chip extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.handleCancel = this.handleCancel.bind(this);
+ }
+
+ handleCancel(e) {
+ e.preventDefault();
+ this.props.onCancel(this.props.topic, this.props.index);
+ }
+
+ render() {
+ const title = this.props.title || this.props.topic;
+ const className = this.props.invalid ? 'chip invalid' : 'chip';
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: className
+ }, this.props.noAvatar ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
+ className: "spacer"
+ }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "avatar-box"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__.default, {
+ avatar: this.props.avatar || true,
+ topic: this.props.topic,
+ title: this.props.title
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, title), this.props.onCancel && !this.props.required ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: this.handleCancel
+ }, "\xD7") : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
+ className: "spacer"
+ }));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/contact-action.jsx":
+/*!****************************************!*\
+ !*** ./src/widgets/contact-action.jsx ***!
+ \****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+
+
+
+class ContactAction extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.handleClick = this.handleClick.bind(this);
+ }
+
+ handleClick(e) {
+ e.preventDefault();
+ e.stopPropagation();
+ this.props.onAction(this.props.action);
+ }
+
+ render() {
+ const {
+ formatMessage
+ } = this.props.intl;
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
+ onClick: this.handleClick,
+ className: "action"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "action-text"
+ }, formatMessage(this.props.title, this.props.values)));
+ }
+
+}
+
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(ContactAction));
+
+/***/ }),
+
+/***/ "./src/widgets/contact-badges.jsx":
+/*!****************************************!*\
+ !*** ./src/widgets/contact-badges.jsx ***!
+ \****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ ContactBadges; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+
+const icon_mapping = {
+ 'muted': 'notifications_off',
+ 'banned': 'block'
+};
+class ContactBadges extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ let badges = null;
+
+ if (this.props.badges && this.props.badges.length > 0) {
+ badges = [];
+ this.props.badges.map(function (b) {
+ if (b.icon) {
+ badges.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons as-badge",
+ key: b.key || b.icon
+ }, icon_mapping[b.icon]));
+ } else {
+ const style = 'badge' + (b.color ? ' ' + b.color : '');
+ badges.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
+ className: style,
+ key: b.key || b.name
+ }, b.name));
+ }
+ });
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, badges);
+ }
+
+ return null;
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/contact-list.jsx":
+/*!**************************************!*\
+ !*** ./src/widgets/contact-list.jsx ***!
+ \**************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _contact_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact.jsx */ "./src/widgets/contact.jsx");
+/* harmony import */ var _contact_action_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./contact-action.jsx */ "./src/widgets/contact-action.jsx");
+/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
+
+
+
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ badge_you: {
+ "id": "badge_you",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "you"
+ }]
+ },
+ badge_owner: {
+ "id": "badge_owner",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "owner"
+ }]
+ }
+});
+
+class ContactList extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ render() {
+ const {
+ formatMessage
+ } = this.props.intl;
+ const showCheckmark = Array.isArray(this.props.topicSelected);
+ const contactNodes = [];
+ let contactsCount = 0;
+
+ if (this.props.contacts && this.props.contacts.length > 0) {
+ this.props.contacts.map(c => {
+ if (c.action) {
+ contactNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_action_jsx__WEBPACK_IMPORTED_MODULE_4__.default, {
+ title: c.title,
+ action: c.action,
+ values: c.values,
+ key: c.action,
+ onAction: this.props.onAction
+ }));
+ } else {
+ const key = this.props.showMode ? c.user : c.topic || c.user;
+
+ if (this.props.filterFunc && this.props.filter) {
+ let content = [key];
+
+ if (c.private && c.private.comment) {
+ content.push(('' + c.private.comment).toLowerCase());
+ }
+
+ if (c.public && c.public.fn) {
+ content.push(('' + c.public.fn).toLowerCase());
+ }
+
+ if (!this.props.filterFunc(this.props.filter, content)) {
+ return;
+ }
+ }
+
+ const isChannel = tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().isChannelTopicName(key);
+ const selected = showCheckmark ? this.props.topicSelected.indexOf(key) > -1 : this.props.topicSelected === key;
+ const badges = [];
+
+ if (this.props.showMode) {
+ if (key == this.props.myUserId) {
+ badges.push({
+ name: formatMessage(messages.badge_you),
+ color: 'green'
+ });
+ }
+
+ if (c.acs && c.acs.isOwner()) {
+ badges.push({
+ name: formatMessage(messages.badge_owner),
+ color: 'blue'
+ });
+ }
+ }
+
+ const comment = Array.isArray(c.private) ? c.private.join(',') : c.private ? c.private.comment : null;
+ contactNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_jsx__WEBPACK_IMPORTED_MODULE_3__.default, {
+ title: c.public ? c.public.fn : null,
+ avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_5__.makeImageUrl)(c.public ? c.public.photo : null),
+ comment: comment,
+ unread: this.props.showUnread ? c.unread : 0,
+ now: c.online && this.props.connected,
+ acs: c.acs,
+ showMode: this.props.showMode,
+ badges: badges,
+ showCheckmark: showCheckmark,
+ selected: selected,
+ showOnline: this.props.showOnline && !isChannel,
+ isChannel: isChannel,
+ onSelected: this.props.onTopicSelected,
+ showContextMenu: this.props.showContextMenu,
+ item: key,
+ index: contactNodes.length,
+ key: key
+ }));
+ contactsCount++;
+ }
+ }, this);
+ }
+
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: this.props.noScroll ? null : "scrollable-panel"
+ }, contactsCount == 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "center-medium-text",
+ dangerouslySetInnerHTML: {
+ __html: this.props.emptyListMessage
+ }
+ }) : null, contactNodes.length > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", {
+ className: "contact-box"
+ }, contactNodes) : null);
+ }
+
+}
+
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(ContactList));
+
+/***/ }),
+
+/***/ "./src/widgets/contact.jsx":
+/*!*********************************!*\
+ !*** ./src/widgets/contact.jsx ***!
+ \*********************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ Contact; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
+/* harmony import */ var _contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact-badges.jsx */ "./src/widgets/contact-badges.jsx");
+/* harmony import */ var _unread_badge_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./unread-badge.jsx */ "./src/widgets/unread-badge.jsx");
+
+
+
+
+
+class Contact extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.handleClick = this.handleClick.bind(this);
+ this.handleContextClick = this.handleContextClick.bind(this);
+ }
+
+ handleClick(e) {
+ e.preventDefault();
+ e.stopPropagation();
+
+ if (this.props.onSelected) {
+ this.props.onSelected(this.props.item, this.props.index);
+ }
+ }
+
+ handleContextClick(e) {
+ e.preventDefault();
+ e.stopPropagation();
+ this.props.showContextMenu({
+ topicName: this.props.item,
+ y: e.pageY,
+ x: e.pageX
+ });
+ }
+
+ render() {
+ let title = this.props.title;
+
+ if (!title) {
+ title = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "unnamed_topic",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Unnamed"
+ }]
+ }));
+ } else if (title.length > 30) {
+ title = title.substring(0, 28) + '...';
+ }
+
+ const online = this.props.now ? 'online' : 'offline';
+ const avatar = this.props.avatar ? this.props.avatar : true;
+ const badges = this.props.badges ? this.props.badges.slice() : [];
+ const icon_badges = [];
+
+ if (this.props.acs) {
+ if (this.props.showMode) {
+ badges.push({
+ name: this.props.acs.getMode(),
+ key: 'mode'
+ });
+ }
+
+ if (this.props.acs.isMuted()) {
+ icon_badges.push({
+ icon: 'muted'
+ });
+ }
+
+ if (!this.props.acs.isJoiner()) {
+ icon_badges.push({
+ icon: 'banned'
+ });
+ }
+ }
+
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
+ className: !this.props.showCheckmark && this.props.selected ? "selected" : null,
+ onClick: this.handleClick
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "avatar-box"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ avatar: avatar,
+ title: this.props.title,
+ topic: this.props.item
+ }), this.props.showOnline ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
+ className: online
+ }) : this.props.showCheckmark && this.props.selected ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "checkmark material-icons"
+ }, "check_circle") : null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "text-box"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
+ className: "contact-title"
+ }, title), this.props.isChannel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("img", {
+ src: "/img/channel.png",
+ className: "channel",
+ alt: "channel"
+ }) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_unread_badge_jsx__WEBPACK_IMPORTED_MODULE_4__.default, {
+ count: this.props.unread
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__.default, {
+ badges: icon_badges
+ })), this.props.comment ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "contact-comment"
+ }, this.props.comment) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__.default, {
+ badges: badges
+ }))), this.props.showContextMenu ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
+ className: "menuTrigger"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: this.handleContextClick
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "expand_more"))) : null);
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/context-menu.jsx":
+/*!**************************************!*\
+ !*** ./src/widgets/context-menu.jsx ***!
+ \**************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "react-dom");
+/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var _lib_navigation_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/navigation.js */ "./src/lib/navigation.js");
+
+
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_2__.defineMessages)({
+ info: {
+ "id": "menu_item_info",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Info"
+ }]
+ },
+ clear_messages: {
+ "id": "menu_item_clear_messages",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Clear messages"
+ }]
+ },
+ clear_for_all: {
+ "id": "menu_item_clear_messages_for_all",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Clear for All"
+ }]
+ },
+ delete: {
+ "id": "menu_item_delete",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Delete"
+ }]
+ },
+ delete_for_all: {
+ "id": "menu_item_delete_for_all",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Delete for All"
+ }]
+ },
+ send_retry: {
+ "id": "menu_item_send_retry",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Retry"
+ }]
+ },
+ mute: {
+ "id": "menu_item_mute",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Mute"
+ }]
+ },
+ unmute: {
+ "id": "menu_item_unmute",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Unmute"
+ }]
+ },
+ topic_delete: {
+ "id": "menu_item_delete_topic",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Delete"
+ }]
+ },
+ topic_delete_warning: {
+ "id": "topic_delete_warning",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Are you sure you want to delete this conversation?"
+ }]
+ },
+ delete_messages_warning: {
+ "id": "delete_messages_warning",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Are you sure you want to delete all messages for everyone? It cannot be undone."
+ }]
+ },
+ unblock: {
+ "id": "menu_item_unblock",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Unblock"
+ }]
+ },
+ block: {
+ "id": "menu_item_block",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Block"
+ }]
+ },
+ topic_block_warning: {
+ "id": "topic_block_warning",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Are you sure you want to block this conversation?"
+ }]
+ },
+ member_delete: {
+ "id": "menu_item_member_delete",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Remove"
+ }]
+ },
+ archive: {
+ "id": "menu_item_archive_topic",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Archive"
+ }]
+ },
+ edit_permissions: {
+ "id": "menu_item_edit_permissions",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Edit permissions"
+ }]
+ },
+ clear_messages_warning: {
+ "id": "clear_messages_warning",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Are you sure you want to clear all messages? It cannot be undone."
+ }]
+ }
+});
+
+class ContextMenu extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ const {
+ formatMessage
+ } = props.intl;
+ this.handlePageClick = this.handlePageClick.bind(this);
+ this.handleEscapeKey = this.handleEscapeKey.bind(this);
+ this.handleClick = this.handleClick.bind(this);
+ this.MenuItems = {
+ 'topic_info': {
+ id: 'topic_info',
+ title: formatMessage(messages.info),
+ handler: null
+ },
+ 'messages_clear': {
+ id: 'messages_clear',
+ title: formatMessage(messages.clear_messages),
+ handler: (params, errorHandler) => {
+ return props.onShowAlert(formatMessage(messages.menu_item_clear_messages), formatMessage(messages.clear_messages_warning), () => {
+ this.deleteMessages(true, false, params, errorHandler);
+ }, null, true, null);
+ }
+ },
+ 'messages_clear_hard': {
+ id: 'messages_clear_hard',
+ title: formatMessage(messages.clear_for_all),
+ handler: (params, errorHandler) => {
+ return props.onShowAlert(formatMessage(messages.menu_item_clear_messages_for_all), formatMessage(message.delete_messages_warning), () => {
+ return this.deleteMessages(true, true, params, errorHandler);
+ }, null, true, null);
+ }
+ },
+ 'message_delete': {
+ id: 'message_delete',
+ title: formatMessage(messages.delete),
+ handler: (params, errorHandler) => {
+ return this.deleteMessages(false, false, params, errorHandler);
+ }
+ },
+ 'message_delete_hard': {
+ id: 'message_delete_hard',
+ title: formatMessage(messages.delete_for_all),
+ handler: (params, errorHandler) => {
+ return this.deleteMessages(false, true, params, errorHandler);
+ }
+ },
+ 'menu_item_send_retry': {
+ id: 'menu_item_send_retry',
+ title: formatMessage(messages.send_retry),
+ handler: (params, errorHandler) => {
+ return this.retryMessage(params, errorHandler);
+ }
+ },
+ 'topic_unmute': {
+ id: 'topic_unmute',
+ title: formatMessage(messages.unmute),
+ handler: this.topicPermissionSetter.bind(this, '+P')
+ },
+ 'topic_mute': {
+ id: 'topic_mute',
+ title: formatMessage(messages.mute),
+ handler: this.topicPermissionSetter.bind(this, '-P')
+ },
+ 'topic_unblock': {
+ id: 'topic_unblock',
+ title: formatMessage(messages.unblock),
+ handler: this.topicPermissionSetter.bind(this, '+JP')
+ },
+ 'topic_block': {
+ id: 'topic_block',
+ title: formatMessage(messages.block),
+ handler: (params, errorHandler) => {
+ return props.onShowAlert(formatMessage(messages.menu_item_block), formatMessage(messages.topic_block_warning), () => {
+ return this.topicPermissionSetter('-JP', params, errorHandler).then(ctrl => {
+ this.props.onTopicRemoved(params.topicName);
+ return ctrl;
+ });
+ }, null, true, null);
+ }
+ },
+ 'topic_delete': {
+ id: 'topic_delete',
+ title: formatMessage(messages.topic_delete),
+ handler: (params, errorHandler) => {
+ return props.onShowAlert(formatMessage(messages.menu_item_delete_topic), formatMessage(messages.topic_delete_warning), () => {
+ const topic = this.props.tinode.getTopic(params.topicName);
+
+ if (!topic) {
+ console.log("Topic not found: ", params.topicName);
+ return;
+ }
+
+ return topic.delTopic(true).catch(err => {
+ if (errorHandler) {
+ errorHandler(err.message, 'err');
+ }
+ });
+ }, null, true, null);
+ }
+ },
+ 'topic_archive': {
+ id: 'topic_archive',
+ title: formatMessage(messages.archive),
+ handler: (params, errorHandler) => {
+ const topic = this.props.tinode.getTopic(params.topicName);
+
+ if (!topic) {
+ console.log("Topic not found: ", params.topicName);
+ return;
+ }
+
+ return topic.archive(true).catch(err => {
+ if (errorHandler) {
+ errorHandler(err.message, 'err');
+ }
+ });
+ }
+ },
+ 'permissions': {
+ id: 'permissions',
+ title: formatMessage(messages.menu_item_edit_permissions),
+ handler: null
+ },
+ 'member_delete': {
+ id: 'member_delete',
+ title: formatMessage(messages.member_delete),
+ handler: (params, errorHandler) => {
+ const topic = this.props.tinode.getTopic(params.topicName);
+
+ if (!topic || !params.user) {
+ console.log("Topic or user not found: '" + params.topicName + "', '" + params.user + "'");
+ return;
+ }
+
+ return topic.delSubscription(params.user).catch(err => {
+ if (errorHandler) {
+ errorHandler(err.message, 'err');
+ }
+ });
+ }
+ },
+ 'member_mute': {
+ id: 'member_mute',
+ title: formatMessage(messages.mute),
+ handler: this.topicPermissionSetter.bind(this, '-P')
+ },
+ 'member_unmute': {
+ id: 'member_unmute',
+ title: formatMessage(messages.unmute),
+ handler: this.topicPermissionSetter.bind(this, '+P')
+ },
+ 'member_block': {
+ id: 'member_block',
+ title: formatMessage(messages.block),
+ handler: this.topicPermissionSetter.bind(this, '-JP')
+ },
+ 'member_unblock': {
+ id: 'member_unblock',
+ title: formatMessage(messages.unblock),
+ handler: this.topicPermissionSetter.bind(this, '+JP')
+ }
+ };
+ }
+
+ componentDidMount() {
+ document.addEventListener('mousedown', this.handlePageClick, false);
+ document.addEventListener('keyup', this.handleEscapeKey, false);
+ }
+
+ componentWillUnmount() {
+ document.removeEventListener('mousedown', this.handlePageClick, false);
+ document.removeEventListener('keyup', this.handleEscapeKey, false);
+ }
+
+ handlePageClick(e) {
+ if (react_dom__WEBPACK_IMPORTED_MODULE_1___default().findDOMNode(this).contains(e.target)) {
+ return;
+ }
+
+ e.preventDefault();
+ e.stopPropagation();
+ this.props.hide();
+ }
+
+ handleEscapeKey(e) {
+ if (e.keyCode === 27) {
+ this.props.hide();
+ }
+ }
+
+ handleClick(e) {
+ e.preventDefault();
+ e.stopPropagation();
+ this.props.hide();
+ let item = this.props.items[e.currentTarget.dataset.id];
+
+ if (typeof item == 'string') {
+ item = this.MenuItems[item];
+ }
+
+ if (!item) {
+ console.log("Invalid menu item ID", e.currentTarget.dataset.id);
+ } else {
+ this.props.onAction(item.id, item.handler(this.props.params, this.props.onError), this.props.params);
+ }
+ }
+
+ deleteMessages(all, hard, params, errorHandler) {
+ const topic = this.props.tinode.getTopic(params.topicName);
+
+ if (!topic) {
+ console.log("Topic not found: ", params.topicName);
+ return;
+ }
+
+ if (!all && topic.cancelSend(params.seq)) {
+ return;
+ }
+
+ const promise = all ? topic.delMessagesAll(hard) : topic.delMessagesList([params.seq], hard);
+ return promise.catch(err => {
+ if (errorHandler) {
+ errorHandler(err.message, 'err');
+ }
+ });
+ }
+
+ retryMessage(params, errorHandler) {
+ const topic = this.props.tinode.getTopic(params.topicName);
+
+ if (!topic || !topic.flushMessage(params.seq)) {
+ return;
+ }
+
+ const msg = topic.createMessage(params.content, false);
+ return topic.publishDraft(msg).catch(err => {
+ if (errorHandler) {
+ errorHandler(err.message, 'err');
+ }
+ });
+ }
+
+ topicPermissionSetter(mode, params, errorHandler) {
+ const topic = this.props.tinode.getTopic(params.topicName);
+
+ if (!topic) {
+ console.log("Topic not found", params.topicName);
+ return;
+ }
+
+ let result = topic.updateMode(params.user, mode);
+
+ if (errorHandler) {
+ result = result.catch(err => {
+ errorHandler(err.message, 'err');
+ });
+ }
+
+ return result;
+ }
+
+ render() {
+ let count = 0;
+ let menu = [];
+ this.props.items.map(item => {
+ if (typeof item == 'string') {
+ item = this.MenuItems[item];
+ }
+
+ if (item && item.title) {
+ menu.push(item.title == '-' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
+ className: "separator",
+ key: count
+ }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
+ onClick: this.handleClick,
+ "data-id": count,
+ key: count
+ }, item.title));
+ }
+
+ count++;
+ });
+ const hSize = 12 * _config_js__WEBPACK_IMPORTED_MODULE_3__.REM_SIZE;
+ const vSize = _config_js__WEBPACK_IMPORTED_MODULE_3__.REM_SIZE * (0.7 + menu.length * 2.5);
+ const left = this.props.bounds.right - this.props.clickAt.x < hSize ? this.props.clickAt.x - this.props.bounds.left - hSize : this.props.clickAt.x - this.props.bounds.left;
+ const top = this.props.bounds.bottom - this.props.clickAt.y < vSize ? this.props.clickAt.y - this.props.bounds.top - vSize : this.props.clickAt.y - this.props.bounds.top;
+ const position = {
+ left: left + 'px',
+ top: top + 'px'
+ };
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", {
+ className: "menu",
+ style: position
+ }, menu);
+ }
+
+}
+
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_2__.injectIntl)(ContextMenu));
+
+/***/ }),
+
+/***/ "./src/widgets/doc-preview.jsx":
+/*!*************************************!*\
+ !*** ./src/widgets/doc-preview.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ DocPreview; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _widgets_send_message_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/send-message.jsx */ "./src/widgets/send-message.jsx");
+/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
+
+
+
+
+
+function iconFromMime(mime) {
+ const mimeToIcon = {
+ default: 'insert_drive_file',
+ image: 'image',
+ text: 'description',
+ video: 'theaters'
+ };
+ return mimeToIcon[mime] || mimeToIcon[(mime || '').split('/')[0]] || mimeToIcon['default'];
+}
+
+class DocPreview extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.handleSendDoc = this.handleSendDoc.bind(this);
+ }
+
+ handleSendDoc(caption) {
+ this.props.onClose();
+ this.props.onSendMessage(this.props.content.file);
+ }
+
+ render() {
+ if (!this.props.content) {
+ return null;
+ }
+
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "image-preview"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "image-preview-caption-panel"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, this.props.content.filename), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onClose();
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons gray"
+ }, "close"))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "image-preview-container"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "flex-column narrow"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons gray"
+ }, iconFromMime(this.props.content.type)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("b", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_content_type",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Content type:"
+ }]
+ })), " ", this.props.content.type || 'application/octet-stream'), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("b", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_size",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Size:"
+ }]
+ })), " ", (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_3__.bytesToHumanSize)(this.props.content.size)))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_send_message_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ noInput: true,
+ onSendMessage: this.handleSendDoc,
+ onError: this.props.onError
+ }));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/error-panel.jsx":
+/*!*************************************!*\
+ !*** ./src/widgets/error-panel.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ ErrorPanel; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _menu_cancel_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./menu-cancel.jsx */ "./src/widgets/menu-cancel.jsx");
+
+
+class ErrorPanel extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ show: false
+ };
+ this.hide = this.hide.bind(this);
+ }
+
+ componentDidUpdate(prevProps) {
+ if (prevProps.level !== this.props.level) {
+ this.setState({
+ show: !!this.props.level
+ });
+ }
+ }
+
+ hide() {
+ this.setState({
+ show: false
+ });
+
+ if (this.props.onClearError) {
+ this.props.onClearError();
+ }
+ }
+
+ render() {
+ const icons = {
+ err: 'error',
+ warn: 'warning',
+ info: 'info'
+ };
+ const level = icons[this.props.level] || '';
+ const className = 'info-box ' + level;
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: className
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "icon"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, level)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, this.props.text, this.props.action ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ style: {
+ whiteSpace: 'nowrap'
+ },
+ onClick: e => {
+ e.preventDefault();
+ this.props.action();
+ }
+ }, this.props.actionText)) : null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "cancel"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_menu_cancel_jsx__WEBPACK_IMPORTED_MODULE_1__.default, {
+ onCancel: this.hide
+ })));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/file-progress.jsx":
+/*!***************************************!*\
+ !*** ./src/widgets/file-progress.jsx ***!
+ \***************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ FileProgress; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+
+
+class FileProgress extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "uploader"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
+ style: {
+ width: this.props.progress * 100 + "%"
+ }
+ })), this.props.progress < 0.999 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onCancel();
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "close"), " ", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "action_cancel",
+ defaultMessage: [{
+ "type": 0,
+ "value": "cancel"
+ }]
+ })) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "upload_finishing",
+ defaultMessage: [{
+ "type": 0,
+ "value": "finishing..."
+ }]
+ }));
+ }
+
+}
+
+/***/ }),
+
+/***/ "./src/widgets/group-manager.jsx":
+/*!***************************************!*\
+ !*** ./src/widgets/group-manager.jsx ***!
+ \***************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _chip_input_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chip-input.jsx */ "./src/widgets/chip-input.jsx");
+/* harmony import */ var _contact_list_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact-list.jsx */ "./src/widgets/contact-list.jsx");
+
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ no_contacts: {
+ "id": "no_contacts",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "You have no contacts :-("
+ }]
+ },
+ contacts_not_found_short: {
+ "id": "contacts_not_found_short",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "No contacts match '"
+ }, {
+ "type": 1,
+ "value": "query"
+ }, {
+ "type": 0,
+ "value": "'"
+ }]
+ }
+});
+
+class GroupManager extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ members: props.members,
+ index: GroupManager.indexMembers(props.members),
+ staticMembers: GroupManager.staticMembers(props.members, props.keepInitialMembers, props.requiredMember),
+ contactFilter: '',
+ noContactsMessage: props.intl.formatMessage(messages.no_contacts),
+ selectedContacts: GroupManager.selectedContacts(props.members)
+ };
+ this.handleContactSelected = this.handleContactSelected.bind(this);
+ this.handleMemberRemoved = this.handleMemberRemoved.bind(this);
+ this.handleContactFilter = this.handleContactFilter.bind(this);
+ this.handleSubmit = this.handleSubmit.bind(this);
+ this.handleCancel = this.handleCancel.bind(this);
+ }
+
+ static indexMembers(members) {
+ let index = {};
+ members.map(m => {
+ index[m.user] = {
+ delta: 0,
+ present: true
+ };
+ });
+ return index;
+ }
+
+ static staticMembers(members, keepInitial, requiredMember) {
+ let stat = [];
+ members.map(m => {
+ if (keepInitial || m.user == requiredMember) {
+ stat.push(m.user);
+ }
+ });
+ return stat;
+ }
+
+ static selectedContacts(members) {
+ let sel = [];
+ members.map(m => {
+ sel.push(m.user);
+ });
+ return sel;
+ }
+
+ handleContactSelected(userId, index) {
+ let status = this.state.index[userId];
+
+ if (status) {
+ if (status.present) {
+ return;
+ }
+
+ status.delta += 1;
+ status.present = true;
+ } else {
+ status = {
+ delta: 1,
+ present: true
+ };
+ }
+
+ let m = this.state.members.slice();
+ m.push(this.props.contacts[index]);
+ const sel = GroupManager.selectedContacts(m);
+ const i = this.state.index;
+ i[userId] = status;
+ this.setState({
+ members: m,
+ index: i,
+ selectedContacts: sel
+ });
+ }
+
+ handleMemberRemoved(userId, index) {
+ const status = this.state.index[userId];
+
+ if (!status || !status.present) {
+ return;
+ }
+
+ status.present = false;
+ status.delta -= 1;
+ let m = this.state.members.slice();
+ m.splice(index, 1);
+ const sel = GroupManager.selectedContacts(m);
+ const i = this.state.index;
+ i[userId] = status;
+ this.setState({
+ members: m,
+ index: i,
+ selectedContacts: sel
+ });
+ }
+
+ handleContactFilter(val) {
+ const {
+ formatMessage
+ } = this.props.intl;
+ const msg = !val ? formatMessage(messages.no_contacts) : formatMessage(messages.contacts_not_found_short, {
+ query: val
+ });
+ this.setState({
+ contactFilter: val,
+ noContactsMessage: msg
+ });
+ }
+
+ static doContactFiltering(filter, values) {
+ if (filter) {
+ for (let i = 0; i < values.length; i++) {
+ if (values[i].indexOf(filter) >= 0) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ return true;
+ }
+
+ handleSubmit() {
+ var instance = this;
+ var members = [];
+ var added = [];
+ var removed = [];
+ var keys = Object.keys(this.state.index);
+ keys.map(function (k) {
+ if (instance.state.index[k].present) {
+ members.push(k);
+ }
+
+ if (instance.state.index[k].delta > 0) {
+ added.push(k);
+ } else if (instance.state.index[k].delta < 0) {
+ removed.push(k);
+ }
+ });
+ this.props.onSubmit(members, added, removed);
+ }
+
+ handleCancel() {
+ this.props.onCancel();
+ }
+
+ render() {
+ const {
+ formatMessage
+ } = this.props.intl;
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "group-manager"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "title_group_members",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Group Members"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_chip_input_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ chips: this.state.members,
+ staticMembers: this.state.staticMembers,
+ prompt: "add members",
+ filterFunc: this.handleContactFilter,
+ onChipRemoved: this.handleMemberRemoved
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "title_all_contacts",
+ defaultMessage: [{
+ "type": 0,
+ "value": "All Contacts"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_list_jsx__WEBPACK_IMPORTED_MODULE_3__.default, {
+ contacts: this.props.contacts,
+ myUserId: this.props.myUserId,
+ topicSelected: this.state.selectedContacts,
+ filter: this.state.contactFilter,
+ filterFunc: GroupManager.doContactFiltering,
+ emptyListMessage: this.state.noContactsMessage,
+ showOnline: false,
+ showUnread: false,
+ onTopicSelected: this.handleContactSelected
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "group-manager-buttons",
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
+ className: "blue",
+ onClick: this.handleSubmit
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_ok",
+ defaultMessage: [{
+ "type": 0,
+ "value": "OK"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
+ className: "white",
+ onClick: this.handleCancel
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_cancel",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Cancel"
+ }]
+ }))));
+ }
+
+}
+
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(GroupManager));
+
+/***/ }),
+
+/***/ "./src/widgets/group-subs.jsx":
+/*!************************************!*\
+ !*** ./src/widgets/group-subs.jsx ***!
+ \************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ GroupSubs; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
+/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
+
+
+
+
+
+class GroupSubs extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ }
+
+ render() {
+ const usersOnline = [];
+ const totalCount = (this.props.subscribers || []).length;
+ const countToShow = Math.min(_config_js__WEBPACK_IMPORTED_MODULE_2__.MAX_ONLINE_IN_TOPIC, totalCount);
+ (this.props.subscribers || []).some(sub => {
+ usersOnline.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "avatar-box",
+ key: sub.user
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_3__.default, {
+ topic: sub.user,
+ avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__.makeImageUrl)(sub.public ? sub.public.photo : null) || true,
+ title: sub.public ? sub.public.fn : null
+ })));
+ return usersOnline.length == countToShow;
+ });
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "topic-users"
+ }, usersOnline, " ", totalCount > countToShow ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "more_online_members",
+ defaultMessage: [{
+ "type": 0,
+ "value": "+"
+ }, {
+ "type": 1,
+ "value": "overflow"
+ }, {
+ "type": 0,
+ "value": " more"
+ }],
+ values: {
+ overflow: totalCount - countToShow
+ }
+ })) : null);
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/host-selector.jsx":
+/*!***************************************!*\
+ !*** ./src/widgets/host-selector.jsx ***!
+ \***************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ HostSelector; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+
+
+class HostSelector extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ hostName: props.serverAddress,
+ changed: false
+ };
+ this.handleHostNameChange = this.handleHostNameChange.bind(this);
+ this.handleEditingFinished = this.handleEditingFinished.bind(this);
+ }
+
+ handleHostNameChange(e) {
+ this.setState({
+ hostName: e.target.value,
+ changed: true
+ });
+ }
+
+ handleEditingFinished() {
+ if (this.state.changed) {
+ this.setState({
+ changed: false
+ });
+ this.props.onServerAddressChange(this.state.hostName.trim());
+ }
+ }
+
+ render() {
+ var hostOptions = [];
+
+ for (let key in _config_js__WEBPACK_IMPORTED_MODULE_1__.KNOWN_HOSTS) {
+ let item = _config_js__WEBPACK_IMPORTED_MODULE_1__.KNOWN_HOSTS[key];
+ hostOptions.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("option", {
+ key: item,
+ value: item
+ }));
+ }
+
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
+ type: "search",
+ id: "host-name",
+ placeholder: this.props.hostName,
+ list: "known-hosts",
+ className: "quoted",
+ value: this.state.hostName,
+ onChange: this.handleHostNameChange,
+ onBlur: this.handleEditingFinished,
+ required: true
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("datalist", {
+ id: "known-hosts"
+ }, hostOptions));
+ }
+
+}
+
+/***/ }),
+
+/***/ "./src/widgets/image-preview.jsx":
+/*!***************************************!*\
+ !*** ./src/widgets/image-preview.jsx ***!
+ \***************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ ImagePreview; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _widgets_send_message_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/send-message.jsx */ "./src/widgets/send-message.jsx");
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
+/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
+
+
+
+
+
+
+class ImagePreview extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ width: 0,
+ height: 0
+ };
+ this.handleSendImage = this.handleSendImage.bind(this);
+ }
+
+ assignWidth(node) {
+ if (node && !this.state.width) {
+ const bounds = node.getBoundingClientRect();
+ this.setState({
+ width: bounds.width | 0,
+ height: bounds.height | 0
+ });
+ }
+ }
+
+ handleSendImage(caption) {
+ this.props.onClose();
+ this.props.onSendMessage(caption, this.props.content.blob);
+ }
+
+ render() {
+ if (!this.props.content) {
+ return null;
+ }
+
+ const dim = (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__.fitImageSize)(this.props.content.width, this.props.content.height, this.state.width, this.state.height, false);
+ const size = dim ? {
+ width: dim.dstWidth + 'px',
+ height: dim.dstHeight + 'px'
+ } : this.props.content.width > this.props.content.height ? {
+ width: '100%'
+ } : {
+ height: '100%'
+ };
+ size.maxWidth = '100%';
+ size.maxHeight = '100%';
+ let filename = this.props.content.filename;
+ const maxlength = Math.max((this.state.width / _config_js__WEBPACK_IMPORTED_MODULE_3__.REM_SIZE / 1.5 | 0) - 2, 12);
+
+ if (filename.length > maxlength) {
+ filename = filename.slice(0, maxlength / 2 - 1) + '…' + filename.slice(1 - maxlength / 2);
+ }
+
+ const width = this.props.content.width || '-';
+ const height = this.props.content.height || '-';
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "image-preview"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "image-preview-caption-panel"
+ }, !this.props.onSendMessage ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: this.props.content.url,
+ download: this.props.content.filename
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "file_download"), " ", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "download_action",
+ defaultMessage: [{
+ "type": 0,
+ "value": "download"
+ }]
+ })) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, this.props.content.filename), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onClose();
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons gray"
+ }, "close"))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "image-preview-container",
+ ref: node => this.assignWidth(node)
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("img", {
+ src: this.props.content.url,
+ style: size,
+ className: "image-preview",
+ alt: this.props.content.filename
+ })), this.props.onSendMessage ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_send_message_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ messagePrompt: "add_image_caption",
+ acceptBlank: true,
+ onSendMessage: this.handleSendImage,
+ onError: this.props.onError
+ }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "image-preview-footer"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("b", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_file_name",
+ defaultMessage: [{
+ "type": 0,
+ "value": "File name:"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
+ title: this.props.content.filename
+ }, filename ? filename : '-'))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("b", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_content_type",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Content type:"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, this.props.content.type)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("b", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_size",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Size:"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, width, " \xD7 ", height, " px; ", (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_5__.bytesToHumanSize)(this.props.content.size)))));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/in-place-edit.jsx":
+/*!***************************************!*\
+ !*** ./src/widgets/in-place-edit.jsx ***!
+ \***************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ InPlaceEdit; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "react-dom");
+/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _visible_password_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./visible-password.jsx */ "./src/widgets/visible-password.jsx");
+
+
+
+class InPlaceEdit extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ active: props.active,
+ initialValue: props.value || '',
+ value: props.value || ''
+ };
+ this.handeTextChange = this.handeTextChange.bind(this);
+ this.handleKeyDown = this.handleKeyDown.bind(this);
+ this.handleStartEditing = this.handleStartEditing.bind(this);
+ this.handleEditingFinished = this.handleEditingFinished.bind(this);
+ this.handlePasswordFinished = this.handlePasswordFinished.bind(this);
+ }
+
+ componentDidUpdate(prevProps, prevState) {
+ const newValue = this.props.value || '';
+
+ if (prevState.initialValue != newValue && !prevState.active) {
+ this.setState({
+ initialValue: newValue,
+ value: newValue
+ });
+ }
+ }
+
+ handeTextChange(e) {
+ this.setState({
+ value: e.target.value
+ });
+ }
+
+ handleKeyDown(e) {
+ if (e.keyCode === 27) {
+ this.setState({
+ value: this.props.value,
+ active: false
+ });
+ } else if (e.keyCode === 13) {
+ this.handleEditingFinished(e);
+ }
+ }
+
+ handleStartEditing() {
+ if (!this.props.readOnly) {
+ react_dom__WEBPACK_IMPORTED_MODULE_1___default().findDOMNode(this).focus();
+ this.setState({
+ active: true
+ });
+ }
+ }
+
+ handleEditingFinished(event) {
+ if (this.props.required && !event.target.checkValidity()) {
+ this.setState({
+ value: this.props.value,
+ active: false
+ });
+ return;
+ }
+
+ this.setState({
+ active: false
+ });
+ let value = this.state.value.trim();
+
+ if ((value || this.props.value) && value !== this.props.value) {
+ this.props.onFinished(value);
+ }
+ }
+
+ handlePasswordFinished(value) {
+ this.setState({
+ active: false
+ });
+
+ if (value && value !== this.props.value) {
+ this.props.onFinished(value);
+ }
+ }
+
+ render() {
+ if (this.state.active) {
+ var fieldType = this.props.type || 'text';
+ } else {
+ var spanText = this.props.type == 'password' ? '••••••••' : this.state.value;
+ var spanClass = 'in-place-edit' + (this.props.readOnly ? ' disabled' : '');
+
+ if (!spanText) {
+ spanText = this.props.placeholder;
+ spanClass += ' placeholder';
+ }
+
+ if (spanText.length > 20) {
+ spanText = spanText.substring(0, 19) + '...';
+ }
+ }
+
+ return this.state.active ? fieldType == 'password' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_visible_password_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ value: this.state.value,
+ placeholder: this.props.placeholder,
+ required: this.props.required ? 'required' : '',
+ autoComplete: this.props.autoComplete,
+ autoFocus: true,
+ onFinished: this.handlePasswordFinished
+ }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
+ type: fieldType,
+ value: this.state.value,
+ placeholder: this.props.placeholder,
+ required: this.props.required ? 'required' : '',
+ autoComplete: this.props.autoComplete,
+ autoFocus: true,
+ onChange: this.handeTextChange,
+ onKeyDown: this.handleKeyDown,
+ onBlur: this.handleEditingFinished
+ }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
+ className: spanClass,
+ onClick: this.handleStartEditing
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
+ className: "content"
+ }, spanText));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/invitation.jsx":
+/*!************************************!*\
+ !*** ./src/widgets/invitation.jsx ***!
+ \************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ Invitation; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+
+
+class Invitation extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.handleButtonAction = this.handleButtonAction.bind(this);
+ }
+
+ handleButtonAction(evt, data) {
+ evt.preventDefault();
+ this.props.onAction(data);
+ }
+
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "accept-invite-panel"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "title"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "chat_invitation",
+ defaultMessage: [{
+ "type": 0,
+ "value": "You are invited to start a new chat. What would you like to do?"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "footer"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
+ className: "blue",
+ onClick: event => {
+ this.handleButtonAction(event, "accept");
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "chat_invitation_accept",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Accept"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
+ className: "white",
+ onClick: event => {
+ this.handleButtonAction(event, "delete");
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "chat_invitation_ignore",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Ignore"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
+ className: "white",
+ onClick: event => {
+ this.handleButtonAction(event, "block");
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "chat_invitation_block",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Block"
+ }]
+ }))));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/letter-tile.jsx":
+/*!*************************************!*\
+ !*** ./src/widgets/letter-tile.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ LetterTile; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
+
+
+
+class LetterTile extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ let avatar;
+
+ if (this.props.avatar === true) {
+ const isGroup = tinode_sdk__WEBPACK_IMPORTED_MODULE_1___default().topicType(this.props.topic) == 'grp';
+ const iconColor = (isGroup ? 'light-color' : 'dark-color') + Math.abs((0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_2__.stringHash)(this.props.topic)) % 16;
+
+ if (this.props.topic && this.props.title && this.props.title.trim()) {
+ const letter = this.props.title.trim().charAt(0);
+ const className = 'lettertile ' + iconColor;
+ avatar = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: className
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, letter));
+ } else {
+ const className = 'material-icons ' + iconColor;
+ avatar = isGroup ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: className
+ }, "group") : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: className
+ }, "person");
+ }
+ } else if (this.props.avatar) {
+ avatar = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("img", {
+ className: "avatar",
+ alt: "avatar",
+ src: this.props.avatar,
+ onError: e => {
+ e.target.onerror = null;
+ e.target.src = "/img/broken_image.png";
+ }
+ });
+ } else {
+ avatar = null;
+ }
+
+ return avatar;
+ }
+
+}
+
+/***/ }),
+
+/***/ "./src/widgets/load-spinner.jsx":
+/*!**************************************!*\
+ !*** ./src/widgets/load-spinner.jsx ***!
+ \**************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ LoadSpinner; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+
+class LoadSpinner extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ return this.props.show ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "load-spinner-box"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "loader-spinner"
+ })) : null;
+ }
+
+}
+
+/***/ }),
+
+/***/ "./src/widgets/menu-cancel.jsx":
+/*!*************************************!*\
+ !*** ./src/widgets/menu-cancel.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ MenuCancel; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+
+class MenuCancel extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onCancel();
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "close"));
+ }
+
+}
+
+/***/ }),
+
+/***/ "./src/widgets/menu-contacts.jsx":
+/*!***************************************!*\
+ !*** ./src/widgets/menu-contacts.jsx ***!
+ \***************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ MenuContacts; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+
+class MenuContacts extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onNewTopic();
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "chat")), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onSettings();
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "settings")));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/menu-start.jsx":
+/*!************************************!*\
+ !*** ./src/widgets/menu-start.jsx ***!
+ \************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ MenuStart; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+
+class MenuStart extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onSignUp();
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "person_add")), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onSettings();
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "settings")));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/more-button.jsx":
+/*!*************************************!*\
+ !*** ./src/widgets/more-button.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ MoreButton; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+
+class MoreButton extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ open: props.open
+ };
+ this.handleToggle = this.handleToggle.bind(this);
+ }
+
+ handleToggle() {
+ const open = !this.state.open;
+ this.setState({
+ open: open
+ });
+
+ if (this.props.onToggle) {
+ this.props.onToggle(open);
+ }
+ }
+
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small clean-clickable",
+ onClick: this.handleToggle
+ }, this.props.title, "...", this.state.open ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "expand_more") : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "chevron_right"));
+ }
+
+}
+
+/***/ }),
+
+/***/ "./src/widgets/new-topic-by-id.jsx":
+/*!*****************************************!*\
+ !*** ./src/widgets/new-topic-by-id.jsx ***!
+ \*****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ invalid_id: {
+ "id": "error_invalid_id",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Invalid ID"
+ }]
+ }
+});
+
+class NewTopicById extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ groupId: ''
+ };
+ this.handleChange = this.handleChange.bind(this);
+ this.handleKeyPress = this.handleKeyPress.bind(this);
+ this.handleSubmit = this.handleSubmit.bind(this);
+ }
+
+ handleChange(e) {
+ this.setState({
+ groupId: e.target.value
+ });
+ }
+
+ handleKeyPress(e) {
+ if (e.key === 'Enter') {
+ this.handleSubmit(e);
+ }
+ }
+
+ handleSubmit(e) {
+ e.preventDefault();
+
+ if (this.state.groupId) {
+ var name = this.state.groupId.trim();
+
+ if (name.length > 3 && (name.substr(0, 3) == 'usr' || name.substr(0, 3) == 'grp')) {
+ this.props.onSubmit(name);
+ } else {
+ this.props.onError(this.props.intl.formatMessage(messages.invalid_id), 'err');
+ }
+ }
+ }
+
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "group_user_id_prompt",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Group or User ID"
+ }]
+ }, prompt => react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
+ type: "text",
+ placeholder: prompt,
+ value: this.state.groupId,
+ onChange: this.handleChange,
+ onKeyPress: this.handleKeyPress,
+ required: true,
+ autoFocus: true
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "dialog-buttons"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
+ className: "blue",
+ onClick: this.handleSubmit
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_subscribe",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Subscribe"
+ }]
+ }))));
+ }
+
+}
+
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(NewTopicById));
+
+/***/ }),
+
+/***/ "./src/widgets/new-topic-group.jsx":
+/*!*****************************************!*\
+ !*** ./src/widgets/new-topic-group.jsx ***!
+ \*****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ NewTopicGroup; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./avatar-upload.jsx */ "./src/widgets/avatar-upload.jsx");
+/* harmony import */ var _checkbox_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./checkbox.jsx */ "./src/widgets/checkbox.jsx");
+/* harmony import */ var _tag_manager_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tag-manager.jsx */ "./src/widgets/tag-manager.jsx");
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+
+
+
+
+
+
+class NewTopicGroup extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ fn: '',
+ private: '',
+ imageDataUrl: null,
+ tags: [],
+ isChannel: false
+ };
+ this.handleFnChange = this.handleFnChange.bind(this);
+ this.handlePrivateChange = this.handlePrivateChange.bind(this);
+ this.handleImageChanged = this.handleImageChanged.bind(this);
+ this.handleTagsChanged = this.handleTagsChanged.bind(this);
+ this.handleChannelToggle = this.handleChannelToggle.bind(this);
+ this.handleSubmit = this.handleSubmit.bind(this);
+ }
+
+ handleFnChange(e) {
+ this.setState({
+ fn: e.target.value
+ });
+ }
+
+ handlePrivateChange(e) {
+ this.setState({
+ private: e.target.value
+ });
+ }
+
+ handleImageChanged(img) {
+ this.setState({
+ imageDataUrl: img
+ });
+ }
+
+ handleTagsChanged(tags) {
+ this.setState({
+ tags: tags
+ });
+ }
+
+ handleChannelToggle() {
+ this.setState({
+ isChannel: !this.state.isChannel
+ });
+ }
+
+ handleSubmit(e) {
+ e.preventDefault();
+ const fn = this.state.fn.trim().substring(0, _config_js__WEBPACK_IMPORTED_MODULE_5__.MAX_TITLE_LENGTH);
+ const comment = this.state.private.trim().substring(0, _config_js__WEBPACK_IMPORTED_MODULE_5__.MAX_TITLE_LENGTH);
+
+ if (fn) {
+ this.props.onSubmit(fn, this.state.imageDataUrl, comment, this.state.tags, this.state.isChannel);
+ }
+ }
+
+ render() {
+ var submitClasses = 'blue';
+
+ if (this.props.disabled) {
+ submitClasses += ' disabled';
+ }
+
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("form", {
+ className: "panel-form",
+ onSubmit: this.handleSubmit
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-column"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small",
+ htmlFor: "new-topic-fn"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_topic_name",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Name"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "topic_name_editing_placeholder",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Freeform name of the group"
+ }]
+ }, placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
+ type: "text",
+ id: "new-topic-fn",
+ placeholder: placeholder,
+ value: this.state.fn,
+ onChange: this.handleFnChange,
+ autoFocus: true,
+ required: true
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("br", null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small",
+ htmlFor: "new-topic-priv"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_private",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Private comment"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "private_editing_placeholder",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Visible to you only"
+ }]
+ }, placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
+ type: "text",
+ id: "new-topic-priv",
+ placeholder: placeholder,
+ value: this.state.private,
+ onChange: this.handlePrivateChange
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ onError: this.props.onError,
+ onImageChanged: this.handleImageChanged
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_checkbox_jsx__WEBPACK_IMPORTED_MODULE_3__.default, {
+ checked: this.state.isChannel,
+ onChange: this.handleChannelToggle
+ }), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ onClick: this.handleChannelToggle
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "channel_prompt",
+ defaultMessage: [{
+ "type": 0,
+ "value": "This is a channel"
+ }]
+ }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "title_tag_manager",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Tags (user discovery)"
+ }]
+ }, title => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_tag_manager_jsx__WEBPACK_IMPORTED_MODULE_4__.default, {
+ tags: this.state.tags,
+ activated: true,
+ onTagsChanged: this.handleTagsChanged,
+ tinode: this.props.tinode,
+ title: title
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "dialog-buttons"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
+ className: submitClasses
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_create",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Create"
+ }]
+ }))));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/permissions-editor.jsx":
+/*!********************************************!*\
+ !*** ./src/widgets/permissions-editor.jsx ***!
+ \********************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./checkbox.jsx */ "./src/widgets/checkbox.jsx");
+/* harmony import */ var _contact_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact.jsx */ "./src/widgets/contact.jsx");
+/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
+
+
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ joiner: {
+ "id": "permission_join",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Join ("
+ }, {
+ "type": 1,
+ "value": "val"
+ }, {
+ "type": 0,
+ "value": ")"
+ }]
+ },
+ reader: {
+ "id": "permission_read",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Read ("
+ }, {
+ "type": 1,
+ "value": "val"
+ }, {
+ "type": 0,
+ "value": ")"
+ }]
+ },
+ writer: {
+ "id": "permission_write",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Write ("
+ }, {
+ "type": 1,
+ "value": "val"
+ }, {
+ "type": 0,
+ "value": ")"
+ }]
+ },
+ preser: {
+ "id": "permission_pres",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Get notified ("
+ }, {
+ "type": 1,
+ "value": "val"
+ }, {
+ "type": 0,
+ "value": ")"
+ }]
+ },
+ approver: {
+ "id": "permission_admin",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Approve ("
+ }, {
+ "type": 1,
+ "value": "val"
+ }, {
+ "type": 0,
+ "value": ")"
+ }]
+ },
+ sharer: {
+ "id": "permission_share",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Share ("
+ }, {
+ "type": 1,
+ "value": "val"
+ }, {
+ "type": 0,
+ "value": ")"
+ }]
+ },
+ deleter: {
+ "id": "permission_delete",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Delete ("
+ }, {
+ "type": 1,
+ "value": "val"
+ }, {
+ "type": 0,
+ "value": ")"
+ }]
+ },
+ owner: {
+ "id": "permission_owner",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Owner ("
+ }, {
+ "type": 1,
+ "value": "val"
+ }, {
+ "type": 0,
+ "value": ")"
+ }]
+ }
+});
+
+class PermissionsEditor extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ mode: (props.mode || '').replace('N', '')
+ };
+ this.handleChange = this.handleChange.bind(this);
+ this.handleSubmit = this.handleSubmit.bind(this);
+ this.handleCancel = this.handleCancel.bind(this);
+ }
+
+ handleChange(val) {
+ let mode = this.state.mode;
+ let idx = mode.indexOf(val);
+
+ if (idx == -1) {
+ mode += val;
+ } else {
+ mode = mode.replace(val, '');
+ }
+
+ this.setState({
+ mode: mode
+ });
+ }
+
+ handleSubmit() {
+ var mode = (this.state.mode || 'N').split('').sort().join('');
+ var before = (this.props.mode || 'N').split('').sort().join('');
+
+ if (mode !== before) {
+ this.props.onSubmit(mode);
+ } else {
+ this.props.onCancel();
+ }
+ }
+
+ handleCancel() {
+ this.props.onCancel();
+ }
+
+ render() {
+ const {
+ formatMessage
+ } = this.props.intl;
+ const all = 'JRWPASDO';
+ const names = {
+ 'J': formatMessage(messages.joiner, {
+ val: 'J'
+ }),
+ 'R': formatMessage(messages.reader, {
+ val: 'R'
+ }),
+ 'W': formatMessage(messages.writer, {
+ val: 'W'
+ }),
+ 'P': formatMessage(messages.preser, {
+ val: 'P'
+ }),
+ 'A': formatMessage(messages.approver, {
+ val: 'A'
+ }),
+ 'S': formatMessage(messages.sharer, {
+ val: 'S'
+ }),
+ 'D': formatMessage(messages.deleter, {
+ val: 'D'
+ }),
+ 'O': formatMessage(messages.owner, {
+ val: 'O'
+ })
+ };
+ let skip = this.props.skip || '';
+ let mode = this.state.mode;
+ let compare = (this.props.compare || '').replace('N', '');
+ let items = [];
+
+ for (let i = 0; i < all.length; i++) {
+ let c = all.charAt(i);
+
+ if (skip.indexOf(c) >= 0 && mode.indexOf(c) < 0) {
+ continue;
+ }
+
+ items.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tr", {
+ key: c
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("td", null, names[c]), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("td", {
+ className: "checkbox"
+ }, skip.indexOf(c) < 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ name: c,
+ checked: mode.indexOf(c) >= 0,
+ onChange: this.handleChange
+ }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ name: c,
+ checked: mode.indexOf(c) >= 0
+ })), this.props.compare ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("td", {
+ className: "checkbox"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ name: c,
+ checked: compare.indexOf(c) >= 0
+ })) : null));
+ }
+
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-column"
+ }, this.props.userTitle ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", {
+ className: "contact-box"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_jsx__WEBPACK_IMPORTED_MODULE_3__.default, {
+ item: this.props.item,
+ title: this.props.userTitle,
+ avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__.makeImageUrl)(this.props.userAvatar ? this.props.userAvatar : null)
+ })) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "title_permissions",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Permissions"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("table", {
+ className: "permission-editor"
+ }, this.props.compare ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("thead", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tr", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("th", null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("th", null, this.props.modeTitle), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("th", null, this.props.compareTitle))) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tbody", null, items)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("br", null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "dialog-buttons"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
+ className: "outline",
+ onClick: this.handleCancel
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_cancel",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Cancel"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
+ className: "blue",
+ onClick: this.handleSubmit
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_ok",
+ defaultMessage: [{
+ "type": 0,
+ "value": "OK"
+ }]
+ }))));
+ }
+
+}
+
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(PermissionsEditor));
+
+/***/ }),
+
+/***/ "./src/widgets/received-marker.jsx":
+/*!*****************************************!*\
+ !*** ./src/widgets/received-marker.jsx ***!
+ \*****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
+
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ message_sending: {
+ "id": "message_sending",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "sending..."
+ }]
+ },
+ message_sending_failed: {
+ "id": "message_sending_failed",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "failed"
+ }]
+ }
+});
+
+class ReceivedMarker extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ const {
+ formatMessage
+ } = this.props.intl;
+ let timestamp;
+
+ if (this.props.received <= (tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().MESSAGE_STATUS_SENDING)) {
+ timestamp = formatMessage(messages.message_sending);
+ } else if (this.props.received == (tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().MESSAGE_STATUS_FAILED)) {
+ timestamp = formatMessage(messages.message_sending_failed);
+ } else {
+ timestamp = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_3__.shortDateFormat)(this.props.timestamp, this.props.intl.locale);
+ }
+
+ let marker = null;
+
+ if (this.props.received <= (tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().MESSAGE_STATUS_SENDING)) {
+ marker = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons small"
+ }, "access_time");
+ } else if (this.props.received == (tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().MESSAGE_STATUS_FAILED)) {
+ marker = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons small amber"
+ }, "warning");
+ } else if (this.props.received == (tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().MESSAGE_STATUS_SENT)) {
+ marker = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons small"
+ }, "done");
+ } else if (this.props.received == (tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().MESSAGE_STATUS_RECEIVED)) {
+ marker = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons small"
+ }, "done_all");
+ } else if (this.props.received == (tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().MESSAGE_STATUS_READ)) {
+ marker = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons small blue"
+ }, "done_all");
+ }
+
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
+ className: "timestamp"
+ }, timestamp, '\u00a0', marker);
+ }
+
+}
+
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(ReceivedMarker));
+
+/***/ }),
+
+/***/ "./src/widgets/search-contacts.jsx":
+/*!*****************************************!*\
+ !*** ./src/widgets/search-contacts.jsx ***!
+ \*****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ SearchContacts; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
+
+
+
+class SearchContacts extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ edited: false,
+ search: ''
+ };
+ this.handleSearchChange = this.handleSearchChange.bind(this);
+ this.handleSearch = this.handleSearch.bind(this);
+ this.handleClear = this.handleClear.bind(this);
+ this.handleKeyDown = this.handleKeyDown.bind(this);
+ }
+
+ componentWillUnmount() {
+ if (this.state.edited) {
+ this.setState({
+ search: '',
+ edited: false
+ });
+ this.props.onSearchContacts((tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().DEL_CHAR));
+ }
+ }
+
+ handleSearchChange(e) {
+ this.setState({
+ search: e.target.value
+ });
+ }
+
+ handleSearch(e) {
+ e.preventDefault();
+ var query = this.state.search.trim();
+ this.setState({
+ edited: query.length > 0
+ });
+ this.props.onSearchContacts(query.length > 0 ? query : (tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().DEL_CHAR));
+ }
+
+ handleClear(e) {
+ e.preventDefault();
+
+ if (this.state.edited) {
+ this.props.onSearchContacts((tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default().DEL_CHAR));
+ }
+
+ this.setState({
+ search: '',
+ edited: false
+ });
+ }
+
+ handleKeyDown(e) {
+ if (e.key === 'Enter') {
+ this.handleSearch(e);
+ } else if (e.key === 'Escape') {
+ this.handleClear();
+ }
+ }
+
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons search"
+ }, "search"), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "search_placeholder",
+ defaultMessage: [{
+ "type": 0,
+ "value": "List like email:alice@example.com, tel:17025550003..."
+ }]
+ }, search_placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
+ className: "search",
+ type: "text",
+ placeholder: search_placeholder,
+ value: this.state.search,
+ onChange: this.handleSearchChange,
+ onKeyDown: this.handleKeyDown,
+ required: true,
+ autoFocus: true
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: this.handleClear
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "close"))));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/send-message.jsx":
+/*!**************************************!*\
+ !*** ./src/widgets/send-message.jsx ***!
+ \**************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
+
+
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ messaging_disabled: {
+ "id": "messaging_disabled_prompt",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Messaging disabled"
+ }]
+ },
+ type_new_message: {
+ "id": "new_message_prompt",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "New message"
+ }]
+ },
+ add_image_caption: {
+ "id": "image_caption_prompt",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Image caption"
+ }]
+ },
+ file_attachment_too_large: {
+ "id": "file_attachment_too_large",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "The file size "
+ }, {
+ "type": 1,
+ "value": "size"
+ }, {
+ "type": 0,
+ "value": " exceeds the "
+ }, {
+ "type": 1,
+ "value": "limit"
+ }, {
+ "type": 0,
+ "value": " limit."
+ }]
+ },
+ cannot_initiate_upload: {
+ "id": "cannot_initiate_file_upload",
+ "defaultMessage": [{
+ "type": 0,
+ "value": "Cannot initiate file upload."
+ }]
+ }
+});
+
+class SendMessage extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ message: '',
+ keypressTimestamp: new Date().getTime() - _config_js__WEBPACK_IMPORTED_MODULE_3__.KEYPRESS_DELAY - 1
+ };
+ this.handlePasteEvent = this.handlePasteEvent.bind(this);
+ this.handleAttachImage = this.handleAttachImage.bind(this);
+ this.handleAttachFile = this.handleAttachFile.bind(this);
+ this.handleSend = this.handleSend.bind(this);
+ this.handleKeyPress = this.handleKeyPress.bind(this);
+ this.handleMessageTyping = this.handleMessageTyping.bind(this);
+ }
+
+ componentDidMount() {
+ if (this.messageEditArea) {
+ this.messageEditArea.addEventListener('paste', this.handlePasteEvent, false);
+ }
+ }
+
+ componentWillUnmount() {
+ if (this.messageEditArea) {
+ this.messageEditArea.removeEventListener('paste', this.handlePasteEvent, false);
+ }
+ }
+
+ componentDidUpdate() {
+ if (this.messageEditArea) {
+ this.messageEditArea.focus();
+ }
+ }
+
+ handlePasteEvent(e) {
+ if (this.props.disabled) {
+ return;
+ }
+
+ if ((0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__.filePasted)(e, (bits, mime, width, height, fname) => {
+ this.props.onAttachImage(mime, bits, width, height, fname);
+ }, (mime, bits, fname) => {
+ this.props.onAttachFile(mime, bits, fname);
+ }, this.props.onError)) {
+ e.preventDefault();
+ }
+ }
+
+ handleAttachImage(e) {
+ if (e.target.files && e.target.files.length > 0) {
+ this.props.onAttachImage(e.target.files[0]);
+ }
+
+ e.target.value = '';
+ }
+
+ handleAttachFile(e) {
+ const {
+ formatMessage
+ } = this.props.intl;
+
+ if (e.target.files && e.target.files.length > 0) {
+ this.props.onAttachFile(e.target.files[0]);
+ }
+
+ e.target.value = '';
+ }
+
+ handleSend(e) {
+ e.preventDefault();
+ const message = this.state.message.trim();
+
+ if (message || this.props.acceptBlank || this.props.noInput) {
+ this.props.onSendMessage(message);
+ this.setState({
+ message: ''
+ });
+ }
+ }
+
+ handleKeyPress(e) {
+ if (e.key === 'Enter') {
+ if (!e.shiftKey) {
+ e.preventDefault();
+ e.stopPropagation();
+ this.handleSend(e);
+ }
+ }
+ }
+
+ handleMessageTyping(e) {
+ const newState = {
+ message: e.target.value
+ };
+
+ if (this.props.onKeyPress) {
+ const now = new Date().getTime();
+
+ if (now - this.state.keypressTimestamp > _config_js__WEBPACK_IMPORTED_MODULE_3__.KEYPRESS_DELAY) {
+ this.props.onKeyPress();
+ newState.keypressTimestamp = now;
+ }
+ }
+
+ this.setState(newState);
+ }
+
+ render() {
+ const {
+ formatMessage
+ } = this.props.intl;
+ const prompt = this.props.disabled ? formatMessage(messages.messaging_disabled) : this.props.messagePrompt ? formatMessage(messages[this.props.messagePrompt]) : formatMessage(messages.type_new_message);
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "send-message-panel"
+ }, !this.props.disabled ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, this.props.onAttachFile ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.attachImage.click();
+ },
+ title: "Add image"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons secondary"
+ }, "photo")), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.attachFile.click();
+ },
+ title: "Attach file"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons secondary"
+ }, "attach_file"))) : null, this.props.noInput ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "hr thin"
+ }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("textarea", {
+ id: "sendMessage",
+ placeholder: prompt,
+ value: this.state.message,
+ onChange: this.handleMessageTyping,
+ onKeyPress: this.handleKeyPress,
+ ref: ref => {
+ this.messageEditArea = ref;
+ },
+ autoFocus: true
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ onClick: this.handleSend,
+ title: "Send"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "send")), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
+ type: "file",
+ ref: ref => {
+ this.attachFile = ref;
+ },
+ onChange: this.handleAttachFile,
+ style: {
+ display: 'none'
+ }
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
+ type: "file",
+ ref: ref => {
+ this.attachImage = ref;
+ },
+ accept: "image/*",
+ onChange: this.handleAttachImage,
+ style: {
+ display: 'none'
+ }
+ })) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "writing-disabled"
+ }, prompt));
+ }
+
+}
+
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(SendMessage));
+
+/***/ }),
+
+/***/ "./src/widgets/side-navbar.jsx":
+/*!*************************************!*\
+ !*** ./src/widgets/side-navbar.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ SideNavbar; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
+/* harmony import */ var _button_back_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./button-back.jsx */ "./src/widgets/button-back.jsx");
+/* harmony import */ var _menu_contacts_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./menu-contacts.jsx */ "./src/widgets/menu-contacts.jsx");
+/* harmony import */ var _menu_start_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./menu-start.jsx */ "./src/widgets/menu-start.jsx");
+
+
+
+
+
+class SideNavbar extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "side-caption-panel",
+ className: "caption-panel"
+ }, this.props.onCancel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_button_back_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ onBack: this.props.onCancel
+ }) : null, this.props.avatar ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "self-avatar",
+ className: "avatar-box"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__.default, {
+ avatar: this.props.avatar,
+ topic: this.props.myUserId,
+ title: this.props.title
+ })) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "sidepanel-title",
+ className: "panel-title"
+ }, this.props.title), this.props.state === 'login' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_menu_start_jsx__WEBPACK_IMPORTED_MODULE_4__.default, {
+ onSignUp: this.props.onSignUp,
+ onSettings: this.props.onSettings
+ }) : this.props.state === 'contacts' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_menu_contacts_jsx__WEBPACK_IMPORTED_MODULE_3__.default, {
+ onNewTopic: this.props.onNewTopic,
+ onSettings: this.props.onSettings
+ }) : null);
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/tag-manager.jsx":
+/*!*************************************!*\
+ !*** ./src/widgets/tag-manager.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ TagManager; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _chip_input_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chip-input.jsx */ "./src/widgets/chip-input.jsx");
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
+
+
+
+
+
+class TagManager extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ tags: this.props.tags,
+ tagInput: '',
+ activated: this.props.activated
+ };
+ this.handleTagInput = this.handleTagInput.bind(this);
+ this.handleAddTag = this.handleAddTag.bind(this);
+ this.handleRemoveTag = this.handleRemoveTag.bind(this);
+ this.handleSubmit = this.handleSubmit.bind(this);
+ this.handleCancel = this.handleCancel.bind(this);
+ }
+
+ static getDerivedStateFromProps(nextProps, prevState) {
+ if (!(0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_4__.arrayEqual)(nextProps.tags, prevState.tags) && !prevState.activated) {
+ return {
+ tags: nextProps.tags
+ };
+ }
+
+ return null;
+ }
+
+ handleTagInput(text) {
+ this.setState({
+ tagInput: text
+ });
+
+ if (text.length > 0) {
+ const last = text[text.length - 1];
+
+ if (text[0] == '"') {
+ if (text.length > 1 && last == '"') {
+ this.handleAddTag(text.substring(1, text.length - 1));
+ }
+ } else if (last == ',' || last == ' ' || last == ';' || last == '"') {
+ this.handleAddTag(text.substring(0, text.length - 1).trim());
+ }
+ }
+ }
+
+ handleAddTag(tag) {
+ const maxTagCount = this.props.tinode.getServerLimit('maxTagCount', _config_js__WEBPACK_IMPORTED_MODULE_3__.MAX_TAG_COUNT);
+
+ if (tag.length > 0 && this.state.tags.length < maxTagCount) {
+ const tags = this.state.tags.slice(0);
+ tags.push(tag);
+ this.setState({
+ tags: tags,
+ tagInput: ''
+ });
+
+ if (this.props.onTagsChanged) {
+ this.props.onTagsChanged(tags);
+ }
+
+ return tags;
+ }
+
+ return this.state.tags;
+ }
+
+ handleRemoveTag(tag, index) {
+ const tags = this.state.tags.slice(0);
+ tags.splice(index, 1);
+ this.setState({
+ tags: tags
+ });
+
+ if (this.props.onTagsChanged) {
+ this.props.onTagsChanged(tags);
+ }
+ }
+
+ handleSubmit() {
+ this.props.onSubmit(this.handleAddTag(this.state.tagInput.trim()));
+ this.setState({
+ activated: false,
+ tags: this.props.tags
+ });
+ }
+
+ handleCancel() {
+ this.setState({
+ activated: false,
+ tagInput: '',
+ tags: this.props.tags
+ });
+
+ if (this.props.onCancel) {
+ this.props.onCancel();
+ }
+ }
+
+ render() {
+ const minTagLength = this.props.tinode.getServerLimit('minTagLength', _config_js__WEBPACK_IMPORTED_MODULE_3__.MIN_TAG_LENGTH);
+ const maxTagLength = this.props.tinode.getServerLimit('maxTagLength', _config_js__WEBPACK_IMPORTED_MODULE_3__.MAX_TAG_LENGTH);
+ let tags = [];
+
+ if (this.state.activated) {
+ this.state.tags.map(tag => {
+ tags.push({
+ user: tag,
+ invalid: tag.length < minTagLength || tag.length > maxTagLength
+ });
+ });
+ } else {
+ this.state.tags.map(tag => {
+ tags.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
+ className: "badge",
+ key: tags.length
+ }, tag));
+ });
+
+ if (tags.length == 0) {
+ tags = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "tags_not_found",
+ defaultMessage: [{
+ "type": 0,
+ "value": "No tags defined. Add some."
+ }]
+ }));
+ }
+ }
+
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-column"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
+ className: "small"
+ }, this.props.title)), this.state.activated ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "tags_editor_no_tags",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Add some tags"
+ }]
+ }, add_tags_prompt => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_chip_input_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ chips: tags,
+ avatarDisabled: true,
+ prompt: add_tags_prompt,
+ onEnter: this.handleAddTag,
+ onFocusLost: this.handleAddTag,
+ onCancel: this.handleCancel,
+ onChipRemoved: this.handleRemoveTag,
+ filterFunc: this.handleTagInput
+ })), this.props.onSubmit || this.props.onCancel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ id: "tag-manager-buttons",
+ className: "dialog-buttons panel-form-row"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
+ className: "outline",
+ onClick: this.handleCancel
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_cancel",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Cancel"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
+ className: "blue",
+ onClick: this.handleSubmit
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_ok",
+ defaultMessage: [{
+ "type": 0,
+ "value": "OK"
+ }]
+ }))) : null) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "quoted"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ href: "#",
+ className: "flat-button",
+ onClick: e => {
+ e.preventDefault();
+ this.setState({
+ activated: true
+ });
+ }
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons"
+ }, "edit"), " \xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "title_manage_tags",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Manage"
+ }]
+ })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, tags)));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/unread-badge.jsx":
+/*!**************************************!*\
+ !*** ./src/widgets/unread-badge.jsx ***!
+ \**************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ UnreadBadge; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+
+class UnreadBadge extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ return this.props.count > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
+ className: "unread"
+ }, this.props.count > 9 ? "9+" : this.props.count) : null;
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/uploading-image.jsx":
+/*!*****************************************!*\
+ !*** ./src/widgets/uploading-image.jsx ***!
+ \*****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ UploadingImage; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _file_progress_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./file-progress.jsx */ "./src/widgets/file-progress.jsx");
+
+
+
+class UploadingImage extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ }
+
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "inline-image"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement('img', this.props), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ className: "rounded-container"
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_file_progress_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
+ progress: this.props.progress,
+ onCancel: this.props.onCancelUpload
+ })));
+ }
+
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/visible-password.jsx":
+/*!******************************************!*\
+ !*** ./src/widgets/visible-password.jsx ***!
+ \******************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ VisiblePassword; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+
+class VisiblePassword extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ value: this.props.value,
+ visible: false
+ };
+ this.handleVisibility = this.handleVisibility.bind(this);
+ this.handeTextChange = this.handeTextChange.bind(this);
+ this.handleKeyDown = this.handleKeyDown.bind(this);
+ this.handleEditingFinished = this.handleEditingFinished.bind(this);
+ }
+
+ handeTextChange(e) {
+ this.setState({
+ value: e.target.value
+ });
+
+ if (this.props.onChange) {
+ this.props.onChange(e);
+ }
+ }
+
+ handleVisibility(e) {
+ e.preventDefault();
+ this.setState({
+ visible: !this.state.visible
+ });
+ }
+
+ handleKeyDown(e) {
+ if (e.keyCode == 27) {
+ this.setState({
+ value: this.props.value,
+ visible: false
+ });
+
+ if (this.props.onFinished) {
+ this.props.onFinished();
+ }
+ } else if (e.keyCode == 13) {
+ this.handleEditingFinished();
+ }
+ }
+
+ handleEditingFinished(e) {
+ if (e) {
+ let currentTarget = e.currentTarget;
+ setTimeout(() => {
+ if (!currentTarget.contains(document.activeElement)) {
+ if (this.props.onFinished) {
+ this.props.onFinished(this.state.value);
+ }
+ }
+ }, 0);
+ } else if (this.props.onFinished) {
+ this.props.onFinished(this.state.value.trim());
+ }
+ }
+
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
+ tabIndex: "-1",
+ className: "group-focus",
+ onBlur: this.handleEditingFinished
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
+ className: "with-visibility",
+ type: this.state.visible ? "text" : "password",
+ value: this.state.value,
+ placeholder: this.props.placeholder,
+ required: this.props.required ? 'required' : '',
+ autoFocus: this.props.autoFocus ? 'autoFocus' : '',
+ autoComplete: this.props.autoComplete,
+ onChange: this.handeTextChange,
+ onKeyDown: this.handleKeyDown
+ }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
+ onClick: this.handleVisibility
+ }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
+ className: "material-icons clickable light-gray"
+ }, this.state.visible ? 'visibility' : 'visibility_off')));
+ }
+
+}
+
+/***/ }),
+
+/***/ "./src/messages.json":
+/*!***************************!*\
+ !*** ./src/messages.json ***!
+ \***************************/
+/***/ (function(module) {
+
+module.exports = JSON.parse("{\"de\":{\"validate_credential_action\":\"bestätigen\",\"title_tag_manager\":\"Schlagworte (Nutzer entdecken)\",\"label_user_contacts\":\"Kontakte:\",\"button_add_another\":\"Hinzufügen\",\"label_message_sound\":\"Benachrichtigungston:\",\"label_push_notifications\":\"Benachrichtigungsmeldungen:\",\"label_push_notifications_disabled\":\"Benachrichtigungsmeldungen (erfordert HTTPS):\",\"label_incognito_mode\":\"inkognito-Modus:\",\"delete_account\":\"Konto löschen\",\"delete_account_arning\":\"Möchten Sie das Konto wirklich löschen? Das kann nicht rückgängig gemacht werden\",\"label_password\":\"Passwort\",\"password_unchanged_prompt\":\"unverändert\",\"button_logout\":\"Abmelden\",\"button_delete_account\":\"Konto löschen\",\"label_default_access_mode\":\"Standard Zugriffsmodus:\",\"blocked_contacts_link\":\"Blockierte Kontakte ({count})\",\"link_contact_us\":\"Kontakt\",\"link_terms_of_service\":\"Nutzungsbedingungen\",\"link_privacy_policy\":\"Datenschutzerklärung\",\"label_sdk\":\"SDK:\",\"label_server_address\":\"Server Adresse:\",\"archived_contacts\":\"Archivierte Kontakte ({count})\",\"contacts_not_found\":\"Sie haben keine Unterhaltungen
¯∖_(ツ)_/¯\",\"full_name_prompt\":\"Vollständiger Name, z.B. Lisa Musterfrau\",\"email_prompt\":\"E-Mail, z.B. lisam@beispiel.de\",\"button_sign_up\":\"Anmelden\",\"label_your_name\":\"Ihr Name\",\"label_user_id\":\"ID:\",\"button_edit\":\"Bearbeiten\",\"requested_permissions\":\"Angefordert\",\"granted_permissions\":\"Erteilt\",\"menu_item_edit_permissions\":\"Berechtigungen ändern\",\"label_other_user\":\"Andere\",\"action_clear_messages\":\"Nachrichten leeren\",\"clear_messages_warning\":\"Sind Sie sicher, dass Sie diese Unterhaltung für alle leeren wollen? Das kann nicht rückgängig gemacht werden.\",\"action_delete_messages\":\"Nachrichten für alle löschen\",\"delete_messages_warning\":\"Sind Sie sicher, dass Sie diese Unterhaltung für alle löschen wollen? Das kann nicht rückgängig gemacht werden.\",\"action_leave_chat\":\"Unterhaltung verlassen\",\"leave_chat_warning\":\"Möchten Sie diese Unterhaltung wirklich verlassen?\",\"action_block_contact\":\"Kontakt blockieren\",\"block_contact_warning\":\"Möchten Sie diesen Kontakt wirklich blockieren?\",\"action_report_chat\":\"Unterhaltung melden\",\"report_chat_warning\":\"Möchten Sie diese Unterhaltung wirklich blockieren und melden?\",\"title_info\":\"Info\",\"label_topic_name\":\"Name\",\"label_private\":\"Privater Kommentar\",\"private_editing_placeholder\":\"Nur für Sie sichtbar\",\"label_muting_topic\":\"Stumm geschaltet:\",\"action_more\":\"Mehr\",\"label_your_permissions\":\"Ihre Berechtigungen:\",\"label_permissions\":\"Berechtigungen:\",\"label_you\":\"Sie:\",\"label_default_access\":\"Standard Zugriffsmodus:\",\"label_group_members\":\"Gruppenmitglieder:\",\"button_add_members\":\"Mitglieder hinzufügen\",\"group_has_no_members\":\"Keine Mitglieder\",\"login_prompt\":\"Anmelden\",\"password_prompt\":\"Passwort\",\"stay_logged_in\":\"Angemeldet bleiben\",\"forgot_password_link\":\"Passwort vergessen?\",\"button_sign_in\":\"Anmelden\",\"label_client\":\"Client:\",\"label_server\":\"Server:\",\"online_now\":\"jetzt online\",\"last_seen_timestamp\":\"Zuletzt gesehen\",\"title_not_found\":\"Nicht gefunden\",\"unnamed_topic\":\"Unbenannt\",\"messages_not_readable\":\"Neue Nachrichten können nicht gelesen werden\",\"peers_messaging_disabled\":\"Gruppennachrichten sind deaktiviert\",\"enable_peers_messaging\":\"Aktivieren\",\"search_for_contacts\":\"Nutzen Sie die Suche um Kontakte zu finden\",\"search_no_results\":\"Die Suche hatte keine Ergebnisse\",\"tabtitle_find_user\":\"Suchen\",\"tabtitle_new_group\":\"Neue Gruppe\",\"tabtitle_group_by_id\":\"nach ID\",\"new_password_placeholder\":\"Geben Sie ein neues Passwort ein\",\"label_reset_password\":\"Passwort per E-Mail wiederherstellen:\",\"credential_email_prompt\":\"E-Mail Adresse für Registrierung\",\"button_reset\":\"Zurücksetzen\",\"button_send_request\":\"Anfrage senden\",\"label_server_to_use\":\"Server verwenden:\",\"label_wire_transport\":\"Übertragung per Kabel:\",\"button_update\":\"Aktualisieren\",\"sidepanel_title_login\":\"Anmelden\",\"sidepanel_title_register\":\"Konto erstellen\",\"sidepanel_title_settings\":\"Einstellungen\",\"sidepanel_title_account_settings\":\"Konto-Einstellungen\",\"sidepanel_title_acc_general\":\"Allgemein\",\"sidepanel_title_acc_security\":\"Sicherheit\",\"sidepanel_title_acc_notifications\":\"Benachrichtigungen\",\"sidepanel_title_acc_support\":\"Unterstützung\",\"sidepanel_title_newtpk\":\"Neue Unterhaltung starten\",\"sidepanel_title_cred\":\"Anmeldeinformationen bestätigen\",\"sidepanel_title_reset\":\"Passwort zurücksetzen\",\"sidepanel_title_archive\":\"Archivierte Unterhaltungen\",\"sidepanel_title_blocked\":\"Blockierte Unterhaltungen\",\"reconnect_countdown\":\"Getrennt. Wiederverbinden in {seconds}…\",\"reconnect_now\":\"Jetzt probieren\",\"push_init_failed\":\"Initialisierung von Push-Benachrichtigungen fehlgeschlagen\",\"invalid_security_token\":\"Ungültiger Sicherheitsschlüssel\",\"no_connection\":\"Keine Verbindung\",\"code_doesnot_match\":\"Code stimmt nicht überein\",\"update_available\":\"Aktualisierung verfügbar.\",\"reload_update\":\"Neu laden\",\"phone_dative\":\"Telefon\",\"email_dative\":\"E-Mail\",\"enter_confirmation_code_prompt\":\"Geben Sie den Bestätigungscode ein, der per {method} geschickt wurde:\",\"numeric_confirmation_code_prompt\":\"Nur zahlen\",\"button_confirm\":\"Bestätigen\",\"save_attachment\":\"Speichern\",\"deleted_content\":\"Inhalt gelöscht\",\"invalid_content\":\"ungültiger Inhalt\",\"user_not_found\":\"Nicht gefunden\",\"badge_you\":\"Sie\",\"badge_owner\":\"Besitzer\",\"menu_item_info\":\"Info\",\"menu_item_clear_messages\":\"Nachrichten leeren\",\"menu_item_clear_messages_for_all\":\"Für alle leeren\",\"menu_item_delete\":\"Löschen\",\"menu_item_delete_for_all\":\"Für alle löschen\",\"menu_item_send_retry\":\"Wiederholen\",\"menu_item_mute\":\"Unterhaltung stumm schalten\",\"menu_item_unmute\":\"Stumm schalten beenden\",\"menu_item_delete_topic\":\"Entfernen\",\"topic_delete_warning\":\"Möchten Sie diese Unterhaltung wirklich löschen?\",\"menu_item_unblock\":\"Blockierung aufheben\",\"menu_item_block\":\"Blockieren\",\"topic_block_warning\":\"Möchten Sie diese Unterhaltung wirklich blockieren?\",\"menu_item_member_delete\":\"Entfernen\",\"menu_item_archive_topic\":\"Archivieren\",\"action_cancel\":\"Abbrechen\",\"upload_finishing\":\"wird abgeschlossen...\",\"no_contacts\":\"Sie haben keine Kontakte :-(\",\"contacts_not_found_short\":\"Keine Kontakte für ''{query}''\",\"title_group_members\":\"Gruppenmitglieder\",\"title_all_contacts\":\"Alle Kontakte\",\"button_ok\":\"OK\",\"button_cancel\":\"Abbrechen\",\"more_online_members\":\"+{overflow} mehr\",\"download_action\":\"herunterladen\",\"label_file_name\":\"Dateiname:\",\"label_content_type\":\"Inhaltsart:\",\"label_size\":\"Größe:\",\"chat_invitation\":\"Sie sind eingeladen, an einem neuen Chat teilzunehmen. Was möchten Sie tun?\",\"chat_invitation_accept\":\"Akzeptieren\",\"chat_invitation_ignore\":\"Ignorieren\",\"chat_invitation_block\":\"Blockieren\",\"error_invalid_id\":\"ungültige ID\",\"group_user_id_prompt\":\"Gruppe oder Benutzer ID\",\"button_subscribe\":\"Abbonieren\",\"topic_name_editing_placeholder\":\"Freiform Name der Gruppe\",\"button_create\":\"Erstellen\",\"permission_join\":\"Beitreten ({val})\",\"permission_read\":\"Lesen ({val})\",\"permission_write\":\"Schreiben ({val})\",\"permission_pres\":\"Benachrichtigt werden ({val})\",\"permission_admin\":\"Bestätigen ({val})\",\"permission_share\":\"Teilen ({val})\",\"permission_delete\":\"Entfernen ({val})\",\"permission_owner\":\"Besitzer ({val})\",\"title_permissions\":\"Berechtigungen\",\"message_sending\":\"wird gesendet...\",\"message_sending_failed\":\"fehlgeschlagen\",\"search_placeholder\":\"Liste: email:lisa@beispiel.de, tel:17025550003...\",\"messaging_disabled_prompt\":\"Nachrichtenübermittlung deaktiviert\",\"new_message_prompt\":\"Neue Nachricht\",\"image_caption_prompt\":\"Bildunterschrift\",\"file_attachment_too_large\":\"Die Dateigröße {size} überschreitet das Limit von {limit}.\",\"cannot_initiate_file_upload\":\"Datei kann nicht hochgeladen werden.\",\"tags_not_found\":\"Keine Schlagworte definiert. Erstellen Sie welche.\",\"tags_editor_no_tags\":\"Schlagworte hinzufügen\",\"title_manage_tags\":\"Verwalten\",\"channel_prompt\":\"Dies ist ein Sender\",\"channel\":\"Sender\"},\"en\":{\"action_block_contact\":\"Block Contact\",\"action_cancel\":\"cancel\",\"action_clear_messages\":\"Clear Messages\",\"action_delete_messages\":\"Clear Messages for All\",\"action_leave_chat\":\"Leave Conversation\",\"action_more\":\"More\",\"action_report_chat\":\"Report Conversation\",\"archived_contacts\":\"Archived contacts ({count})\",\"badge_owner\":\"owner\",\"badge_you\":\"you\",\"block_contact_warning\":\"Are you sure you want to block this contact?\",\"blocked_contacts_link\":\"Blocked contacts ({count})\",\"button_add_another\":\"Add another\",\"button_add_members\":\"Add members\",\"button_cancel\":\"Cancel\",\"button_confirm\":\"Confirm\",\"button_create\":\"Create\",\"button_delete_account\":\"Delete account\",\"button_edit\":\"Edit\",\"button_logout\":\"Logout\",\"button_ok\":\"OK\",\"button_reset\":\"Reset\",\"button_send_request\":\"Send request\",\"button_sign_in\":\"Sign in\",\"button_sign_up\":\"Sign up\",\"button_subscribe\":\"Subscribe\",\"button_update\":\"Update\",\"cannot_initiate_file_upload\":\"Cannot initiate file upload.\",\"channel\":\"channel\",\"channel_prompt\":\"This is a channel\",\"chat_invitation\":\"You are invited to start a new chat. What would you like to do?\",\"chat_invitation_accept\":\"Accept\",\"chat_invitation_block\":\"Block\",\"chat_invitation_ignore\":\"Ignore\",\"clear_messages_warning\":\"Are you sure you want to clear all messages? It cannot be undone.\",\"code_doesnot_match\":\"Code does not match\",\"contacts_not_found\":\"You have no chats
¯∖_(ツ)_/¯\",\"contacts_not_found_short\":\"No contacts match ''{query}''\",\"credential_email_prompt\":\"Your registration email\",\"delete_account\":\"Delete account\",\"delete_account_arning\":\"Are you sure you want to delete your account? It cannot be undone.\",\"delete_messages_warning\":\"Are you sure you want to delete all messages for everyone? It cannot be undone.\",\"deleted_content\":\"content deleted\",\"download_action\":\"download\",\"email_dative\":\"email\",\"email_prompt\":\"Email, e.g. jdoe@example.com\",\"enable_peers_messaging\":\"Enable\",\"enter_confirmation_code_prompt\":\"Enter confirmation code sent to you by {method}:\",\"error_invalid_id\":\"Invalid ID\",\"file_attachment_too_large\":\"The file size {size} exceeds the {limit} limit.\",\"forgot_password_link\":\"Forgot password?\",\"full_name_prompt\":\"Full name, e.g. John Doe\",\"granted_permissions\":\"Granted\",\"group_has_no_members\":\"No members\",\"group_user_id_prompt\":\"Group or User ID\",\"image_caption_prompt\":\"Image caption\",\"invalid_content\":\"invalid content\",\"invalid_security_token\":\"Invalid security token\",\"label_client\":\"Client:\",\"label_content_type\":\"Content type:\",\"label_default_access\":\"Default access mode:\",\"label_default_access_mode\":\"Default access mode:\",\"label_file_name\":\"File name:\",\"label_group_members\":\"Group members:\",\"label_incognito_mode\":\"Incognito mode:\",\"label_message_sound\":\"Message sound:\",\"label_muting_topic\":\"Muted:\",\"label_other_user\":\"Other\",\"label_password\":\"Password\",\"label_permissions\":\"Permissions:\",\"label_private\":\"Private comment\",\"label_push_notifications\":\"Notification alerts:\",\"label_push_notifications_disabled\":\"Notification alerts (requires HTTPS):\",\"label_reset_password\":\"Send a password reset email:\",\"label_sdk\":\"SDK:\",\"label_server\":\"Server:\",\"label_server_address\":\"Server address:\",\"label_server_to_use\":\"Server to use:\",\"label_size\":\"Size:\",\"label_topic_name\":\"Name\",\"label_user_contacts\":\"Contacts:\",\"label_user_id\":\"ID:\",\"label_wire_transport\":\"Wire transport:\",\"label_you\":\"You:\",\"label_your_name\":\"Your name\",\"label_your_permissions\":\"Your permissions:\",\"last_seen_timestamp\":\"Last seen\",\"leave_chat_warning\":\"Are you sure you want to leave this conversation?\",\"link_contact_us\":\"Contact Us\",\"link_privacy_policy\":\"Privacy Policy\",\"link_terms_of_service\":\"Terms of Service\",\"login_prompt\":\"Login\",\"menu_item_archive_topic\":\"Archive\",\"menu_item_block\":\"Block\",\"menu_item_clear_messages\":\"Clear messages\",\"menu_item_clear_messages_for_all\":\"Clear for All\",\"menu_item_delete\":\"Delete\",\"menu_item_delete_for_all\":\"Delete for All\",\"menu_item_delete_topic\":\"Delete\",\"menu_item_edit_permissions\":\"Edit permissions\",\"menu_item_info\":\"Info\",\"menu_item_member_delete\":\"Remove\",\"menu_item_mute\":\"Mute\",\"menu_item_send_retry\":\"Retry\",\"menu_item_unblock\":\"Unblock\",\"menu_item_unmute\":\"Unmute\",\"message_sending\":\"sending...\",\"message_sending_failed\":\"failed\",\"messages_not_readable\":\"no access to messages\",\"messaging_disabled_prompt\":\"Messaging disabled\",\"more_online_members\":\"+{overflow} more\",\"new_message_prompt\":\"New message\",\"new_password_placeholder\":\"Enter new password\",\"no_connection\":\"No connection\",\"no_contacts\":\"You have no contacts :-(\",\"numeric_confirmation_code_prompt\":\"Numbers only\",\"online_now\":\"online now\",\"password_prompt\":\"Password\",\"password_unchanged_prompt\":\"Unchanged\",\"peers_messaging_disabled\":\"Peer's messaging is disabled.\",\"permission_admin\":\"Approve ({val})\",\"permission_delete\":\"Delete ({val})\",\"permission_join\":\"Join ({val})\",\"permission_owner\":\"Owner ({val})\",\"permission_pres\":\"Get notified ({val})\",\"permission_read\":\"Read ({val})\",\"permission_share\":\"Share ({val})\",\"permission_write\":\"Write ({val})\",\"phone_dative\":\"phone\",\"private_editing_placeholder\":\"Visible to you only\",\"push_init_failed\":\"Failed to initialize push notifications\",\"reconnect_countdown\":\"Disconnected. Reconnecting in {seconds}…\",\"reconnect_now\":\"Try now\",\"reload_update\":\"Reload\",\"report_chat_warning\":\"Are you sure you want to block and report this conversation?\",\"requested_permissions\":\"Requested\",\"save_attachment\":\"save\",\"search_for_contacts\":\"Use search to find contacts\",\"search_no_results\":\"Search returned no results\",\"search_placeholder\":\"List like email:alice@example.com, tel:17025550003...\",\"sidepanel_title_acc_general\":\"General\",\"sidepanel_title_acc_notifications\":\"Notifications\",\"sidepanel_title_acc_security\":\"Security\",\"sidepanel_title_acc_support\":\"Support\",\"sidepanel_title_account_settings\":\"Account Settings\",\"sidepanel_title_archive\":\"Archived Chats\",\"sidepanel_title_blocked\":\"Blocked Chats\",\"sidepanel_title_cred\":\"Confirm Credentials\",\"sidepanel_title_login\":\"Sign In\",\"sidepanel_title_newtpk\":\"Start New Chat\",\"sidepanel_title_register\":\"Create Account\",\"sidepanel_title_reset\":\"Reset Password\",\"sidepanel_title_settings\":\"Settings\",\"stay_logged_in\":\"Stay logged in\",\"tabtitle_find_user\":\"find\",\"tabtitle_group_by_id\":\"by id\",\"tabtitle_new_group\":\"new group\",\"tags_editor_no_tags\":\"Add some tags\",\"tags_not_found\":\"No tags defined. Add some.\",\"title_all_contacts\":\"All Contacts\",\"title_group_members\":\"Group Members\",\"title_info\":\"Info\",\"title_manage_tags\":\"Manage\",\"title_not_found\":\"Not found\",\"title_permissions\":\"Permissions\",\"title_tag_manager\":\"Tags (user discovery)\",\"topic_block_warning\":\"Are you sure you want to block this conversation?\",\"topic_delete_warning\":\"Are you sure you want to delete this conversation?\",\"topic_name_editing_placeholder\":\"Freeform name of the group\",\"unnamed_topic\":\"Unnamed\",\"update_available\":\"Update available.\",\"upload_finishing\":\"finishing...\",\"user_not_found\":\"Not found\",\"validate_credential_action\":\"confirm\"},\"es\":{\"validate_credential_action\":\"confirmar\",\"title_tag_manager\":\"Etiquetas (descubrimiento de usuarios)\",\"label_user_contacts\":\"Contactos:\",\"button_add_another\":\"Añadir contacto\",\"label_message_sound\":\"Sonido de mensaje:\",\"label_push_notifications\":\"Alertas de notificaciones:\",\"label_push_notifications_disabled\":\"Alertas de notificaciones (requiere HTTPS):\",\"label_incognito_mode\":\"Modo incógnito:\",\"delete_account\":\"Eliminar cuenta\",\"delete_account_arning\":\"¿Estás seguro de que deseas eliminar permanentemente tu cuenta? Esta acción es irreversible.\",\"label_password\":\"Contraseña\",\"password_unchanged_prompt\":\"Sin cambios\",\"button_logout\":\"Cerrar sesión\",\"button_delete_account\":\"Eliminar cuenta\",\"label_default_access_mode\":\"Modo de acceso predeterminado:\",\"blocked_contacts_link\":\"Contactos bloqueados ({count})\",\"link_contact_us\":\"Contáctanos\",\"link_terms_of_service\":\"Términos de uso\",\"link_privacy_policy\":\"Política de privacidad\",\"label_sdk\":\"SDK:\",\"label_server_address\":\"Dirección del servidor:\",\"archived_contacts\":\"Contactos archivados ({count})\",\"contacts_not_found\":\"No tienes chats
¯∖_(ツ)_/¯\",\"full_name_prompt\":\"Nombre completo, p.ej. Juan González Hernández\",\"email_prompt\":\"Correo electrónico, p.ej. juan@example.com\",\"button_sign_up\":\"Regístrate\",\"label_your_name\":\"Tu nombre\",\"label_user_id\":\"ID:\",\"button_edit\":\"Editar\",\"requested_permissions\":\"Solicitados\",\"granted_permissions\":\"Otorgados\",\"menu_item_edit_permissions\":\"Editar permisos\",\"label_other_user\":\"Otros\",\"action_clear_messages\":\"Borrar mensajes\",\"clear_messages_warning\":\"¿Estás seguro de que quieres eliminar todos los mensajes? Esta acción es irreversible.\",\"action_delete_messages\":\"Borrar mensajes para todos\",\"delete_messages_warning\":\"¿Estás seguro de que quieres eliminar todos los mensajes para todos? Esta acción es irreversible.\",\"action_leave_chat\":\"Dejar conversación\",\"leave_chat_warning\":\"¿Estás seguro de que quieres dejar esta conversación?\",\"action_block_contact\":\"Bloquear contacto\",\"block_contact_warning\":\"¿Estás seguro de que quieres bloquear a este contacto?\",\"action_report_chat\":\"Reportar conversación\",\"report_chat_warning\":\"¿Estás seguro de que quieres bloquear y reportar a esta conversación?\",\"title_info\":\"Información\",\"label_topic_name\":\"Nombre del tema\",\"label_private\":\"Comentario privado\",\"private_editing_placeholder\":\"Sólo visible para tí\",\"label_muting_topic\":\"Silenciado:\",\"action_more\":\"Más\",\"label_your_permissions\":\"Tus permisoss:\",\"label_permissions\":\"Permisos:\",\"label_you\":\"Tú:\",\"label_default_access\":\"Modo de acceso predeterminado:\",\"label_group_members\":\"Miembros del grupo:\",\"button_add_members\":\"Añadir miembros\",\"group_has_no_members\":\"No hay miembros\",\"login_prompt\":\"Nombre de usuario\",\"password_prompt\":\"Contraseña\",\"stay_logged_in\":\"Permanecer conectado\",\"forgot_password_link\":\"¿Olvidaste tu contraseña?\",\"button_sign_in\":\"Entrar\",\"label_client\":\"Cliente:\",\"label_server\":\"Servidor:\",\"online_now\":\"en línea\",\"last_seen_timestamp\":\"Últ. vez\",\"title_not_found\":\"No encontrado\",\"unnamed_topic\":\"Sin nombre\",\"messages_not_readable\":\"sin acceso a mensajes\",\"peers_messaging_disabled\":\"La mensajería Peer está deshabilitada.\",\"enable_peers_messaging\":\"Habilitar\",\"search_for_contacts\":\"Usa la búsqueda para encontrar contactos\",\"search_no_results\":\"La búsqueda no arrojó resultados\",\"tabtitle_find_user\":\"encontrar\",\"tabtitle_new_group\":\"nuevo grupo\",\"tabtitle_group_by_id\":\"por ID\",\"new_password_placeholder\":\"Introduzca una nueva contraseña\",\"label_reset_password\":\"Enviar un correo electrónico de restablecimiento de contraseña:\",\"credential_email_prompt\":\"Tu correo electrónico de registro\",\"button_reset\":\"Restablecer\",\"button_send_request\":\"Enviar petición\",\"label_server_to_use\":\"Servidor para usar:\",\"label_wire_transport\":\"Transporte de alambre:\",\"button_update\":\"Actualizar\",\"sidepanel_title_login\":\"Iniciar sesión\",\"sidepanel_title_register\":\"Crear cuenta\",\"sidepanel_title_settings\":\"Ajustes\",\"sidepanel_title_account_settings\":\"Ajustes de la cuenta\",\"sidepanel_title_acc_general\":\"General\",\"sidepanel_title_acc_security\":\"Seguridad\",\"sidepanel_title_acc_notifications\":\"Notificaciones\",\"sidepanel_title_acc_support\":\"Soporte\",\"sidepanel_title_newtpk\":\"Iniciar un nuevo chat\",\"sidepanel_title_cred\":\"Confirmar credenciales\",\"sidepanel_title_reset\":\"Restablecer contraseña\",\"sidepanel_title_archive\":\"Chats archivados\",\"sidepanel_title_blocked\":\"Chats bloqueados\",\"update_available\":\"Actualización disponible.\",\"reload_update\":\"Recargar\",\"reconnect_countdown\":\"Desconectado. Reconectando en {seconds}…\",\"reconnect_now\":\"Reintentar\",\"push_init_failed\":\"Error al inicializar las notificaciones push\",\"invalid_security_token\":\"Token de seguridad inválido\",\"no_connection\":\"Sin conexión\",\"code_doesnot_match\":\"El código no coincide\",\"phone_dative\":\"teléfono\",\"email_dative\":\"correo electrónico\",\"enter_confirmation_code_prompt\":\"Intruduzca el código de confirmación enviado a tu {method}:\",\"numeric_confirmation_code_prompt\":\"Sólo números\",\"button_confirm\":\"Confirmar\",\"save_attachment\":\"guardar\",\"deleted_content\":\"este mensaje fue eliminado\",\"invalid_content\":\"contenido inválido\",\"user_not_found\":\"Usuario no encontrado\",\"badge_you\":\"tú\",\"badge_owner\":\"propietario\",\"menu_item_info\":\"Información\",\"menu_item_clear_messages\":\"Borrar mensajes\",\"menu_item_clear_messages_for_all\":\"Borrar para todos\",\"menu_item_delete\":\"Eliminar\",\"menu_item_delete_for_all\":\"Eliminar para todos\",\"menu_item_send_retry\":\"Inténtalo de nuevo\",\"menu_item_mute\":\"Silenciar\",\"menu_item_unmute\":\"Anular el silencio\",\"menu_item_delete_topic\":\"Eliminar\",\"topic_delete_warning\":\"¿Estás seguro de que quieres eliminar esta conversación?\",\"menu_item_unblock\":\"Desbloquear\",\"menu_item_block\":\"Bloquear\",\"topic_block_warning\":\"¿Estás seguro de que quieres bloquear esta conversación\",\"menu_item_member_delete\":\"Eliminar\",\"menu_item_archive_topic\":\"Archivar\",\"action_cancel\":\"cancelar\",\"upload_finishing\":\"terminando...\",\"no_contacts\":\"No tienes contactos :-(\",\"contacts_not_found_short\":\"Ningún contacto coincide con ''{query}''\",\"title_group_members\":\"Miembros del grupo\",\"title_all_contacts\":\"Todos los contactos\",\"button_ok\":\"OK\",\"button_cancel\":\"Cancelar\",\"more_online_members\":\"+{overflow} más\",\"download_action\":\"descargar\",\"label_file_name\":\"Nombre del archivo:\",\"label_content_type\":\"Tipo de contenido:\",\"label_size\":\"Tamaño:\",\"chat_invitation\":\"Estás invitado a participar en un nuevo chat. ¿Qué te gustaría hacer?\",\"chat_invitation_accept\":\"Aceptar\",\"chat_invitation_ignore\":\"Ignorar\",\"chat_invitation_block\":\"Bloquear\",\"error_invalid_id\":\"ID inválido\",\"group_user_id_prompt\":\"ID del grupo o usuario\",\"button_subscribe\":\"Suscribirse\",\"topic_name_editing_placeholder\":\"Nombre del grupo\",\"button_create\":\"Crear\",\"permission_join\":\"Unirse ({val})\",\"permission_read\":\"Leer ({val})\",\"permission_write\":\"Escribir ({val})\",\"permission_pres\":\"Ser notificado ({val})\",\"permission_admin\":\"Approbar ({val})\",\"permission_share\":\"Compartir ({val})\",\"permission_delete\":\"Eliminar ({val})\",\"permission_owner\":\"Propietario ({val})\",\"title_permissions\":\"Permisos\",\"message_sending\":\"enviando...\",\"message_sending_failed\":\"no se pudo enviar el mensaje\",\"search_placeholder\":\"Ej. email:alice@example.com, tel:17025550003...\",\"messaging_disabled_prompt\":\"El envío de mensajes está deshabilitado\",\"new_message_prompt\":\"Nuevo mensaje\",\"image_caption_prompt\":\"Añade un comentario\",\"file_attachment_too_large\":\"El tamaño del archivo {size} excede el límite de {limit}.\",\"cannot_initiate_file_upload\":\"No se pudo iniciar la carga del archivo.\",\"tags_not_found\":\"No hay etiquetas definidas. Añade unas.\",\"tags_editor_no_tags\":\"Añadir etiquetas\",\"title_manage_tags\":\"Gestionar\",\"channel_prompt\":\"Este es un canal\",\"channel\":\"canal\"},\"ko\":{\"validate_credential_action\":\"확인\",\"title_tag_manager\":\"태그(사용자검색)\",\"label_user_contacts\":\"연락처: \",\"button_add_another\":\"다른항목추가\",\"label_message_sound\":\"메시지소리: \",\"label_push_notifications\":\"통지경보: \",\"label_push_notifications_disabled\":\"통지경보(HTTPS필요): \",\"label_incognito_mode\":\"시크릿모드: \",\"delete_account\":\"계정삭제\",\"delete_account_arning\":\"계정을삭제하시겠습니까?실행취소할수없습니다.\",\"label_password\":\"비밀번호\",\"password_unchanged_prompt\":\"변경되지않음\",\"button_logout\":\"로그아웃\",\"button_delete_account\":\"계정삭제\",\"label_default_access_mode\":\"기본액세스모드: \",\"blocked_contacts_link\":\"차단된연락처({수})\",\"link_contact_us\":\"문의처\",\"link_terms_of_service\":\"서비스약관\",\"link_privacy_policy\":\"개인정보보호정책\",\"label_sdk\":\"SDK:\",\"label_server_address\":\"서버주소: \",\"archived_contacts\":\"보관된연락처({수})\",\"contacts_not_found\":\"채팅이없습니다
¯∖_(ツ)_/¯\",\"full_name_prompt\":\"전체이름(예:홍길동)\",\"email_prompt\":\"이메일(예:hong@example.com)\",\"button_sign_up\":\"가입\",\"label_your_name\":\"이름\",\"label_user_id\":\"ID:\",\"button_edit\":\"편집\",\"requested_permissions\":\"요청\",\"menu_item_edit_permissions\":\"편집권한\",\"label_other_user\":\"기타\",\"action_clear_messages\":\"메시지지우기\",\"clear_messages_warning\":\"모든메시지를지우시겠습니까?실행취소할수없습니다.\",\"action_delete_messages\":\"모든메시지지우기\",\"delete_messages_warning\":\"모든사람의모든메시지를삭제하시겠습니까?실행취소할수없습니다.\",\"action_leave_chat\":\"대화나누기\",\"leave_chat_warning\":\"이대화를나가시겠습니까?\",\"action_block_contact\":\"연락차단\",\"block_contact_warning\":\"이연락처를차단하시겠습니까?\",\"action_report_chat\":\"대화기록\",\"report_chat_warning\":\"이대화를차단하고기록하시겠습니까?\",\"title_info\":\"정보\",\"label_topic_name\":\"이름\",\"label_private\":\"개인코멘트\",\"private_editing_placeholder\":\"나만볼수있습니다\",\"label_muting_topic\":\"음소거: \",\"action_more\":\"더보기\",\"label_your_permissions\":\"권한: \",\"label_permissions\":\"권한: \",\"label_you\":\"당신: \",\"label_default_access\":\"기본액세스모드: \",\"label_group_members\":\"그룹회원: \",\"button_add_members\":\"회원추가\",\"group_has_no_members\":\"회원없음\",\"login_prompt\":\"로그인\",\"password_prompt\":\"비밀번호\",\"stay_logged_in\":\"로그인상태유지\",\"forgot_password_link\":\"비밀번호를잊으셨습니까?\",\"button_sign_in\":\"로그인\",\"label_client\":\"클라이언트: \",\"label_server\":\"서버: \",\"online_now\":\"현재접속중\",\"last_seen_timestamp\":\"마지막으로본\",\"title_not_found\":\"찾을수없음\",\"unnamed_topic\":\"이름없는\",\"peers_messaging_disabled\":\"동료의메시지가비활성화되었습니다.\",\"enable_peers_messaging\":\"활성화\",\"search_for_contacts\":\"검색을사용하여연락처찾기\",\"search_no_results\":\"검색결과가없습니다\",\"tabtitle_find_user\":\"찾기\",\"tabtitle_new_group\":\"새그룹\",\"tabtitle_group_by_id\":\"id로\",\"new_password_placeholder\":\"새비밀번호입력\",\"label_reset_password\":\"비밀번호재설정이메일보내기: \",\"credential_email_prompt\":\"등록이메일\",\"button_reset\":\"재설정\",\"button_send_request\":\"요청보내기\",\"label_server_to_use\":\"사용할서버:\",\"label_wire_transport\":\"와이어수송:\",\"button_update\":\"업데이트\",\"sidepanel_title_login\":\"로그인\",\"sidepanel_title_register\":\"계정만들기\",\"sidepanel_title_settings\":\"설정\",\"sidepanel_title_account_settings\":\"계정설정\",\"sidepanel_title_acc_general\":\"일반\",\"sidepanel_title_acc_security\":\"보안\",\"sidepanel_title_acc_notifications\":\"알림\",\"sidepanel_title_acc_support\":\"지원\",\"sidepanel_title_newtpk\":\"새채팅시작\",\"sidepanel_title_cred\":\"자격증명확인\",\"sidepanel_title_reset\":\"비밀번호재설정\",\"sidepanel_title_archive\":\"보관된채팅\",\"sidepanel_title_blocked\":\"차단된채팅\",\"update_available\":\"업데이트가능.\",\"reload_update\":\"재로드\",\"reconnect_countdown\":\"연결이끊어졌습니다.다시연결하는중{초}…\",\"reconnect_now\":\"지금시도\",\"push_init_failed\":\"푸시알림을초기화하지못했습니다\",\"invalid_security_token\":\"유효하지않은보안토큰\",\"no_connection\":\"연결없음\",\"code_doesnot_match\":\"코드가일치하지않습니다\",\"phone_dative\":\"전화\",\"email_dative\":\"이메일\",\"enter_confirmation_code_prompt\":\"{방법}으로보낸확인코드를입력하십시오:\",\"numeric_confirmation_code_prompt\":\"숫자만\",\"button_confirm\":\"확인\",\"save_attachment\":\"저장\",\"invalid_content\":\"잘못된내용\",\"user_not_found\":\"찾을수없음\",\"badge_you\":\"당신\",\"badge_owner\":\"소유자\",\"menu_item_info\":\"정보\",\"menu_item_clear_messages\":\"메시지지우기\",\"menu_item_clear_messages_for_all\":\"모두지우기\",\"menu_item_delete\":\"삭제\",\"menu_item_delete_for_all\":\"모두삭제\",\"menu_item_send_retry\":\"다시시도\",\"menu_item_mute\":\"음소거\",\"menu_item_unmute\":\"음소거해제\",\"menu_item_delete_topic\":\"삭제\",\"topic_delete_warning\":\"이대화를삭제하시겠습니까?\",\"menu_item_unblock\":\"차단해제\",\"menu_item_block\":\"차단\",\"topic_block_warning\":\"이대화를차단하시겠습니까?\",\"menu_item_member_delete\":\"제거\",\"menu_item_archive_topic\":\"보관\",\"action_cancel\":\"취소\",\"upload_finishing\":\"마무리...\",\"no_contacts\":\"연락처가없습니다 (._.)\",\"contacts_not_found_short\":\"'{문의}'와일치하는연락처가없습니다.\",\"title_group_members\":\"그룹구성원\",\"title_all_contacts\":\"모든연락처\",\"button_ok\":\"OK\",\"button_cancel\":\"취소\",\"more_online_members\":\"+{넘침}더보기\",\"download_action\":\"다운로드\",\"label_file_name\":\"파일이름: \",\"label_content_type\":\"컨텐츠유형: \",\"label_size\":\"크기: \",\"chat_invitation\":\"새로운대화를시작하도록초대되었습니다.무엇을하시겠습니까?\",\"chat_invitation_accept\":\"수락\",\"chat_invitation_ignore\":\"무시\",\"chat_invitation_block\":\"차단\",\"error_invalid_id\":\"잘못된ID\",\"group_user_id_prompt\":\"그룹또는사용자ID\",\"button_subscribe\":\"구독\",\"topic_name_editing_placeholder\":\"그룹의자유형이름\",\"button_create\":\"작성\",\"permission_join\":\"참여({val})\",\"permission_read\":\"읽기({val})\",\"permission_write\":\"쓰기({val})\",\"permission_pres\":\"알림받기({val})\",\"permission_admin\":\"승인({val})\",\"permission_share\":\"공유({val})\",\"permission_delete\":\"삭제({val})\",\"permission_owner\":\"소유자({val})\",\"title_permissions\":\"권한\",\"message_sending\":\"보내기...\",\"message_sending_failed\":\"실패\",\"search_placeholder\":\"email:alice@example.com,tel:17025550003...와같은목록\",\"messaging_disabled_prompt\":\"메시지비활성화\",\"new_message_prompt\":\"새메시지\",\"image_caption_prompt\":\"이미지설명\",\"file_attachment_too_large\":\"파일크기{크기}이(가){제한}제한을초과합니다.\",\"cannot_initiate_file_upload\":\"파일업로드를시작할수없습니다.\",\"tags_not_found\":\"태그가정의되지않았습니다.일부를추가하십시오.\",\"tags_editor_no_tags\":\"일부태그추가\",\"title_manage_tags\":\"관리\",\"granted_permissions\":\"승낙하다\",\"messages_not_readable\":\"메시지에 액세스 할 수 없습니다\",\"deleted_content\":\"내용이 삭제되었습니다\",\"channel_prompt\":\"이 채널입니다\",\"channel\":\"채널\"},\"ro\":{\"validate_credential_action\":\"confirmă\",\"title_tag_manager\":\"Tag-uri (user discovery)\",\"label_user_contacts\":\"Contacte:\",\"button_add_another\":\"Adaugă\",\"label_message_sound\":\"Sunet de mesaj:\",\"label_push_notifications\":\"Alerte de notificare:\",\"label_push_notifications_disabled\":\"Alerte de notificare (necesită HTTPS):\",\"label_incognito_mode\":\"Mod incognito:\",\"delete_account\":\"Șterge contul\",\"delete_account_arning\":\"Ești sigur că dorești să ștergi contul? Acesta nu va putea fi recuperat.\",\"label_password\":\"Parola\",\"password_unchanged_prompt\":\"Neschimbată\",\"button_logout\":\"Deconectare\",\"button_delete_account\":\"Șterge cont\",\"label_default_access_mode\":\"Default access mode:\",\"blocked_contacts_link\":\"Contact blocate ({count})\",\"link_contact_us\":\"Contactează-ne\",\"link_terms_of_service\":\"Termenii Serviciului\",\"link_privacy_policy\":\"Politica de Confidențialitate\",\"label_sdk\":\"SDK:\",\"label_server_address\":\"Adresa serverului:\",\"archived_contacts\":\"Contacte arhivate ({count})\",\"contacts_not_found\":\"Nu ai contacte salvate
¯∖_(ツ)_/¯\",\"full_name_prompt\":\"Numele tău\",\"email_prompt\":\"Adresa de e-mail\",\"button_sign_up\":\"Creează cont\",\"label_your_name\":\"Numele tău\",\"label_user_id\":\"ID:\",\"button_edit\":\"Editează\",\"requested_permissions\":\"Necesare\",\"granted_permissions\":\"Oferite\",\"menu_item_edit_permissions\":\"Editează permisiuni\",\"label_other_user\":\"Altele\",\"action_clear_messages\":\"Șterge mesajele\",\"clear_messages_warning\":\"Ești sigur că dorești să ștergi mesajele? Acestea nu pot fi recuperate.\",\"action_delete_messages\":\"Șterge toate mesajele\",\"delete_messages_warning\":\"Ești sigur că dorești să șterge mesajele din toate conversațiile? Acestea nu pot fi recuperate.\",\"action_leave_chat\":\"Ieși din conversație\",\"leave_chat_warning\":\"Ești sigur că dorești să ieși din conersație?\",\"action_block_contact\":\"Blochează contact\",\"block_contact_warning\":\"Ești sigur că dorești să blochezi acest contact?\",\"action_report_chat\":\"Raportează conversația\",\"report_chat_warning\":\"Ești sigur că dorești să blochezi și să raportezi această conversație?\",\"title_info\":\"Info\",\"label_topic_name\":\"Nume\",\"label_private\":\"Comentariu privat\",\"private_editing_placeholder\":\"Vizibil doar ție\",\"label_muting_topic\":\"Mod silențios (muted):\",\"action_more\":\"Mai multe\",\"label_your_permissions\":\"Permisiuniile tale:\",\"label_permissions\":\"Permisiuni:\",\"label_you\":\"Tu:\",\"label_default_access\":\"Modul default:\",\"label_group_members\":\"Membrii grupului:\",\"button_add_members\":\"Adaugă persoane\",\"group_has_no_members\":\"În acest grup nu se află persoane\",\"login_prompt\":\"Conectează-te\",\"password_prompt\":\"Parola\",\"stay_logged_in\":\"Rămâi conectat\",\"forgot_password_link\":\"Ți-ai uitat parola?\",\"button_sign_in\":\"Conectează-te\",\"label_client\":\"Client:\",\"label_server\":\"Server:\",\"online_now\":\"online acum\",\"last_seen_timestamp\":\"Văzut ultima dată\",\"title_not_found\":\"Nu a fost găsit\",\"channel\":\"canal\",\"unnamed_topic\":\"Nedenumit\",\"messages_not_readable\":\"Mesajele nu pot fi citite\",\"peers_messaging_disabled\":\"Mesageria de tip Peer este dezactivată.\",\"enable_peers_messaging\":\"Activează\",\"search_for_contacts\":\"Caută în contacte\",\"search_no_results\":\"Nu s-au găsit rezultate\",\"tabtitle_find_user\":\"caută\",\"tabtitle_new_group\":\"grup nou\",\"tabtitle_group_by_id\":\"după id\",\"new_password_placeholder\":\"Introdu parolă\",\"label_reset_password\":\"Resetează parola:\",\"credential_email_prompt\":\"Adresa de e-mail\",\"button_reset\":\"Resetează\",\"button_send_request\":\"Trimite cerere\",\"label_server_to_use\":\"Server de utilizat:\",\"label_wire_transport\":\"Transportul legat:\",\"button_update\":\"Actualizează\",\"sidepanel_title_login\":\"Conectează-te\",\"sidepanel_title_register\":\"Creează Cont\",\"sidepanel_title_settings\":\"Setări\",\"sidepanel_title_account_settings\":\"Setările Contului\",\"sidepanel_title_acc_general\":\"Generale\",\"sidepanel_title_acc_security\":\"Securitate\",\"sidepanel_title_acc_notifications\":\"Notificări\",\"sidepanel_title_acc_support\":\"Ajutor\",\"sidepanel_title_newtpk\":\"Creeză un nou Chat\",\"sidepanel_title_cred\":\"Confirmă credențiale\",\"sidepanel_title_reset\":\"Resetează Parola\",\"sidepanel_title_archive\":\"Conversații Arhivate\",\"sidepanel_title_blocked\":\"Conversații Blocate\",\"reconnect_countdown\":\"Deconectat. Se încearcă conectarea în {seconds}…\",\"reconnect_now\":\"Încearcă din nou\",\"push_init_failed\":\"Nu s-a reușit inițializarea tip push notifications\",\"invalid_security_token\":\"Codul de securitate este invalid\",\"no_connection\":\"Nu există conexiune\",\"code_doesnot_match\":\"Codul furnizat nu este valid\",\"update_available\":\"Actualizare disponibilă.\",\"reload_update\":\"Reîncarcă\",\"phone_dative\":\"telefon\",\"email_dative\":\"email\",\"enter_confirmation_code_prompt\":\"Introu codul de confirmare trimis pe {method}:\",\"numeric_confirmation_code_prompt\":\"Doar cifre\",\"button_confirm\":\"Confirmă\",\"save_attachment\":\"salvează\",\"deleted_content\":\"conținut șters\",\"invalid_content\":\"conținut invalid\",\"user_not_found\":\"Utilizatorul nu a fost găsit\",\"badge_you\":\"tu\",\"badge_owner\":\"owner\",\"menu_item_info\":\"Info\",\"menu_item_clear_messages\":\"Șterge mesajele\",\"menu_item_clear_messages_for_all\":\"Ștergele pe toate\",\"menu_item_delete\":\"Șterge\",\"menu_item_delete_for_all\":\"Ștergele pe toate\",\"menu_item_send_retry\":\"Reîncearcă\",\"menu_item_mute\":\"Mute\",\"menu_item_unmute\":\"Unmute\",\"menu_item_delete_topic\":\"Șterge\",\"topic_delete_warning\":\"Ești sigur că dorești să șterge această conversație?\",\"menu_item_unblock\":\"Deblochează\",\"menu_item_block\":\"Blochează\",\"topic_block_warning\":\"Ești sigur că dorești să blochezi această conversație?\",\"menu_item_member_delete\":\"Șterge persoană\",\"menu_item_archive_topic\":\"Arhivează\",\"action_cancel\":\"anulează\",\"upload_finishing\":\"se încarcă...\",\"no_contacts\":\"Nu ai contacte adăugate :-(\",\"contacts_not_found_short\":\"Niciun contact găsit după criteriile ''{query}''\",\"title_group_members\":\"Persoanele din grup\",\"title_all_contacts\":\"Toate Contactele\",\"button_ok\":\"OK\",\"button_cancel\":\"Anulează\",\"more_online_members\":\"+{overflow} mai mult\",\"download_action\":\"download\",\"label_file_name\":\"Nume fișier:\",\"label_content_type\":\"Tip conținut:\",\"label_size\":\"Size:\",\"chat_invitation\":\"Ai primit invitație într-o conversație. Accepți?\",\"chat_invitation_accept\":\"Da, accept\",\"chat_invitation_ignore\":\"Ignoră\",\"chat_invitation_block\":\"Blochează\",\"error_invalid_id\":\"ID Invalid\",\"group_user_id_prompt\":\"Grup sau user ID\",\"button_subscribe\":\"Subscribe\",\"topic_name_editing_placeholder\":\"Numele grupului\",\"channel_prompt\":\"Acesta este un canal\",\"button_create\":\"Creează\",\"permission_join\":\"Participare ({val})\",\"permission_read\":\"Citire ({val})\",\"permission_write\":\"Scriere ({val})\",\"permission_pres\":\"Notificare ({val})\",\"permission_admin\":\"Aprobare ({val})\",\"permission_share\":\"Distribuire ({val})\",\"permission_delete\":\"Ștergere ({val})\",\"permission_owner\":\"Deținător ({val})\",\"title_permissions\":\"Permisiuni\",\"message_sending\":\"se trimite...\",\"message_sending_failed\":\"eroare\",\"search_placeholder\":\"Caută după e-mail sau număr telefon...\",\"messaging_disabled_prompt\":\"Mesageria este dezactivată\",\"new_message_prompt\":\"Mesaj nou\",\"image_caption_prompt\":\"Titlul imaginii\",\"file_attachment_too_large\":\"Dimensiunea fișiterului {size} depășește limita de {limit}.\",\"cannot_initiate_file_upload\":\"Nu se poate face încărcarea.\",\"tags_not_found\":\"Niciun tag definit. Adaugă.\",\"tags_editor_no_tags\":\"Adaugă tag-uri\",\"title_manage_tags\":\"Administrează\"},\"ru\":{\"contacts_not_found\":\"Чатов нет
¯∖_(ツ)_/¯\",\"full_name_prompt\":\"Полное имя, напр. Иван Петров\",\"email_prompt\":\"Email, напр. ivan@example.com\",\"button_sign_up\":\"Создать аккаунт\",\"label_your_name\":\"Ваше имя\",\"label_password\":\"Пароль\",\"password_unchanged_prompt\":\"Не изменен\",\"label_user_id\":\"ID:\",\"label_default_access_mode\":\"Доступ по умолчанию:\",\"label_message_sound\":\"Звук нового сообщения:\",\"label_push_notifications\":\"Уведомления:\",\"label_push_notifications_disabled\":\"Уведомления (требуют HTTPS):\",\"title_tag_manager\":\"Теги для поиска\",\"button_logout\":\"Выйти\",\"login_prompt\":\"Логин\",\"password_prompt\":\"Пароль\",\"stay_logged_in\":\"Запомнить\",\"forgot_password_link\":\"Напомнить пароль\",\"button_sign_in\":\"Войти\",\"label_client\":\"Клиент:\",\"label_server\":\"Сервер:\",\"online_now\":\"онлайн\",\"last_seen_timestamp\":\"Был активен\",\"title_not_found\":\"Не найден\",\"unnamed_topic\":\"Без названия\",\"messages_not_readable\":\"нет доступа к сообщениям\",\"tabtitle_find_user\":\"найти\",\"tabtitle_new_group\":\"создать\",\"tabtitle_group_by_id\":\"по id\",\"label_server_to_use\":\"Использовать сервер:\",\"label_wire_transport\":\"Соединение:\",\"button_update\":\"Применить\",\"sidepanel_title_login\":\"Авторизация\",\"sidepanel_title_register\":\"Зарегистрироваться\",\"sidepanel_title_settings\":\"Настройки\",\"sidepanel_title_account_settings\":\"Настройки аккаунта\",\"sidepanel_title_newtpk\":\"Новый чат\",\"sidepanel_title_cred\":\"Подтвердить\",\"sidepanel_title_reset\":\"Сменить пароль\",\"tags_not_found\":\"Тегов нет. Добавьте\",\"tags_editor_no_tags\":\"Добавьте теги\",\"title_manage_tags\":\"Редактировать\",\"message_sending\":\"в пути...\",\"message_sending_failed\":\"ошибка\",\"search_placeholder\":\"Список, напр. email:alice@example.com, tel:+17025550003...\",\"messaging_disabled_prompt\":\"Отправка недоступна\",\"new_message_prompt\":\"Новое сообщение\",\"file_attachment_too_large\":\"Размер файла {size} превышает {limit} лимит.\",\"cannot_initiate_file_upload\":\"Ошибка загрузки файла.\",\"search_for_contacts\":\"Поиск контактов\",\"enter_confirmation_code_prompt\":\"Код подтверждения, полученный по {method}:\",\"numeric_confirmation_code_prompt\":\"Только цифры\",\"button_confirm\":\"Подтвердить\",\"button_ok\":\"OK\",\"button_cancel\":\"Отменить\",\"invalid_content\":\"сообщение не читается\",\"label_file_name\":\"Имя файла:\",\"label_content_type\":\"Тип:\",\"label_size\":\"Размер:\",\"phone_dative\":\"телефону\",\"email_dative\":\"емейлу\",\"title_group_members\":\"Участники\",\"download_action\":\"скачать\",\"permission_join\":\"Подписываться ({val})\",\"permission_read\":\"Читать ({val})\",\"permission_write\":\"Писать ({val})\",\"permission_pres\":\"Уведомлять ({val})\",\"permission_admin\":\"Подтверждать ({val})\",\"permission_share\":\"Приглашать ({val})\",\"permission_delete\":\"Удалять ({val})\",\"permission_owner\":\"Владелец ({val})\",\"title_permissions\":\"Права доступа\",\"requested_permissions\":\"Требуются\",\"granted_permissions\":\"Получены\",\"menu_item_edit_permissions\":\"Права доступа\",\"label_other_user\":\"Второй\",\"label_topic_name\":\"Название\",\"label_private\":\"Комментарий\",\"private_editing_placeholder\":\"Виден только вам\",\"label_muting_topic\":\"Без уведомлений\",\"action_more\":\"Ещё\",\"label_your_permissions\":\"Ваши права доступа:\",\"label_permissions\":\"Права доступа:\",\"label_you\":\"Вы:\",\"label_default_access\":\"Права по умолчанию:\",\"label_group_members\":\"Участники чата:\",\"button_add_members\":\"Добавить\",\"group_has_no_members\":\"Нет участников\",\"action_leave_chat\":\"Уйти из чата\",\"menu_item_info\":\"Информация\",\"menu_item_clear_messages\":\"Удалить сообщения\",\"menu_item_clear_messages_for_all\":\"Удалить для всех\",\"menu_item_delete\":\"Удалить\",\"menu_item_delete_for_all\":\"Удалить для всех\",\"menu_item_send_retry\":\"Отправить заново\",\"menu_item_mute\":\"Не уведомлять\",\"menu_item_unmute\":\"Уведомлять\",\"menu_item_delete_topic\":\"Удалить чат\",\"menu_item_unblock\":\"Разблокировать\",\"menu_item_block\":\"Заблокировать\",\"menu_item_member_delete\":\"Отписать\",\"title_info\":\"Подробности\",\"new_password_placeholder\":\"Введите новый пароль\",\"label_reset_password\":\"Отправить емейл для смены пароля:\",\"credential_email_prompt\":\"Регистрационный емейл\",\"button_reset\":\"Изменить\",\"button_send_request\":\"Отправить\",\"action_cancel\":\"отменить\",\"upload_finishing\":\"завершение...\",\"no_contacts\":\"Ничего нет :-(\",\"contacts_not_found_short\":\"Нет контактов для запроса ''{query}''\",\"title_all_contacts\":\"Все контакты\",\"error_invalid_id\":\"Неверный ID\",\"group_user_id_prompt\":\"ID чата или пользователя\",\"button_subscribe\":\"Подписаться\",\"topic_name_editing_placeholder\":\"Название чата\",\"button_create\":\"Создать\",\"badge_you\":\"вы\",\"badge_owner\":\"влад.\",\"update_available\":\"Есть новая версия приложения.\",\"reload_update\":\"Обновить\",\"user_not_found\":\"Не найден\",\"reconnect_countdown\":\"Нет связи. Подключение через {seconds}…\",\"reconnect_now\":\"Подключить сейчас.\",\"save_attachment\":\"сохранить\",\"menu_item_archive_topic\":\"В архив\",\"archived_contacts\":\"Чаты в архиве ({count})\",\"sidepanel_title_archive\":\"Архив чатов\",\"chat_invitation\":\"Вас пригласили начать новый чат. Как вы хотите поступить?\",\"chat_invitation_accept\":\"Принять\",\"chat_invitation_ignore\":\"Игнорировать\",\"chat_invitation_block\":\"Заблокировать\",\"peers_messaging_disabled\":\"Чат заблокирован у корреспондента.\",\"enable_peers_messaging\":\"Разблокировать.\",\"more_online_members\":\"+еще {overflow}\",\"label_user_contacts\":\"Конакты:\",\"validate_credential_action\":\"подтвердить\",\"link_contact_us\":\"Связаться с нами\",\"link_terms_of_service\":\"Условия сервиса\",\"link_privacy_policy\":\"Политика конфиденциальности\",\"action_delete_messages\":\"Удалить сообщения\",\"action_block_contact\":\"Заблокировать контакт\",\"action_report_chat\":\"Сообщить о нарушении\",\"delete_messages_warning\":\"Вы действительно хотите удалить все сообщения?\",\"leave_chat_warning\":\"Вы действительно хотите покинуть этот чат?\",\"block_contact_warning\":\"Вы действительно заблокировать этот контакт?\",\"report_chat_warning\":\"Вы действительно хотите сообщить о нарушении и заблокировать этот чат?\",\"action_clear_messages\":\"Удалить сообщения\",\"clear_messages_warning\":\"Вы действительно хотите удалить все сообщения в чате? Их будет невозможно восстановить.\",\"topic_delete_warning\":\"Вы действительно хотите удалить этот чат?\",\"topic_block_warning\":\"Вы действительно хотите заблокировать этот чат?\",\"search_no_results\":\"Ничего не найдено\",\"deleted_content\":\"удалено\",\"image_caption_prompt\":\"Подпись к фото\",\"label_incognito_mode\":\"Режим инкогнито:\",\"delete_account\":\"Удалить аккаунт\",\"delete_account_arning\":\"Вы уверены, что ходите удалить свой аккаунт? Его невозможно будет восстановить.\",\"button_delete_account\":\"Удалить аккаунт\",\"sidepanel_title_acc_security\":\"Безопасность\",\"sidepanel_title_acc_notifications\":\"Уведомления\",\"sidepanel_title_acc_support\":\"Поддержка\",\"label_sdk\":\"SDK:\",\"label_server_address\":\"Адрес сервера:\",\"button_edit\":\"Редактировать\",\"button_add_another\":\"Добавить\",\"sidepanel_title_acc_general\":\"Общие настройки\",\"blocked_contacts_link\":\"Заблокированные ({count})\",\"sidepanel_title_blocked\":\"Заблокированные чаты\",\"push_init_failed\":\"Ошибка инициализации пуш уведомлений\",\"invalid_security_token\":\"Токен некорректен\",\"no_connection\":\"Нет связи\",\"code_doesnot_match\":\"Код не совпадает\",\"channel_prompt\":\"Создать канал\",\"channel\":\"канал\"},\"zh\":{\"archived_contacts\":\"已归档联系人 ({count})\",\"contacts_not_found\":\"你尚无会话
¯∖_(ツ)_/¯\",\"full_name_prompt\":\"全名,例如张伟\",\"email_prompt\":\"电子邮件,例如 zhang@example.com\",\"button_sign_up\":\"注册\",\"label_your_name\":\"你的姓名\",\"label_password\":\"密码\",\"password_unchanged_prompt\":\"未改变\",\"label_user_id\":\"地址:\",\"label_default_access_mode\":\"蓦然访问模式:\",\"label_message_sound\":\"消息提示音:\",\"label_push_notifications\":\"通知提醒:\",\"label_push_notifications_disabled\":\"通知提醒(需要 HTTPS):\",\"title_tag_manager\":\"标签(用户发现)\",\"button_logout\":\"登出\",\"requested_permissions\":\"已请求\",\"granted_permissions\":\"已授予\",\"menu_item_edit_permissions\":\"编辑权限\",\"label_other_user\":\"其他\",\"title_info\":\"信息\",\"label_topic_name\":\"名称\",\"label_private\":\"私人评论\",\"private_editing_placeholder\":\"仅自己可见\",\"label_muting_topic\":\"已静音:\",\"action_more\":\"更多\",\"label_your_permissions\":\"你的权限:\",\"label_permissions\":\"权限:\",\"label_you\":\"你:\",\"label_default_access\":\"默认权限模式:\",\"label_group_members\":\"群组成员:\",\"button_add_members\":\"添加成员\",\"group_has_no_members\":\"无成员\",\"action_leave_chat\":\"离开\",\"login_prompt\":\"登录\",\"password_prompt\":\"密码\",\"stay_logged_in\":\"保持登录\",\"forgot_password_link\":\"忘记密码?\",\"button_sign_in\":\"登录\",\"label_client\":\"客户端:\",\"label_server\":\"服务器:\",\"online_now\":\"在线\",\"last_seen_timestamp\":\"最后可见\",\"title_not_found\":\"无法找到\",\"unnamed_topic\":\"未命名\",\"messages_not_readable\":\"无消息访问权限\",\"peers_messaging_disabled\":\"成员间消息已禁用。\",\"enable_peers_messaging\":\"启用\",\"tabtitle_find_user\":\"搜索\",\"tabtitle_new_group\":\"新群组\",\"tabtitle_group_by_id\":\"通过 id\",\"search_for_contacts\":\"使用搜索寻找联系人\",\"new_password_placeholder\":\"输入新密码\",\"label_reset_password\":\"发送密码重置邮件:\",\"credential_email_prompt\":\"你的注册邮箱\",\"button_reset\":\"重置\",\"button_send_request\":\"发送请求\",\"label_server_to_use\":\"使用的服务器:\",\"label_wire_transport\":\"线路传输:\",\"button_update\":\"更新\",\"sidepanel_title_login\":\"登录\",\"sidepanel_title_register\":\"创建账户\",\"sidepanel_title_settings\":\"设置\",\"sidepanel_title_account_settings\":\"帐号设定\",\"sidepanel_title_newtpk\":\"开始新会话\",\"sidepanel_title_cred\":\"确认凭据\",\"sidepanel_title_reset\":\"重置密码\",\"sidepanel_title_archive\":\"已存档会话\",\"update_available\":\"更新可用。\",\"reload_update\":\"重新载入\",\"reconnect_countdown\":\"连接已断开。{seconds} 秒后重新连接…\",\"reconnect_now\":\"立即尝试\",\"phone_dative\":\"电话\",\"email_dative\":\"电子邮件\",\"enter_confirmation_code_prompt\":\"输入通过{method}发送的验证码:\",\"numeric_confirmation_code_prompt\":\"仅数字\",\"button_confirm\":\"确认\",\"save_attachment\":\"保存\",\"invalid_content\":\"无效内容\",\"user_not_found\":\"未找到\",\"badge_you\":\"你\",\"badge_owner\":\"所有者\",\"menu_item_info\":\"信息\",\"menu_item_clear_messages\":\"清空消息\",\"menu_item_clear_messages_for_all\":\"全部清除\",\"menu_item_delete\":\"删除\",\"menu_item_delete_for_all\":\"全部删除\",\"menu_item_mute\":\"静音\",\"menu_item_unmute\":\"取消静音\",\"menu_item_delete_topic\":\"删除\",\"menu_item_unblock\":\"取消屏蔽\",\"menu_item_block\":\"屏蔽\",\"menu_item_member_delete\":\"移除\",\"menu_item_archive_topic\":\"归档\",\"action_cancel\":\"取消\",\"upload_finishing\":\"正在结束...\",\"no_contacts\":\"你尚无联系人 (._.)\",\"contacts_not_found_short\":\"无联系人匹配''{query}''\",\"title_group_members\":\"群组成员\",\"title_all_contacts\":\"全部联系人\",\"button_ok\":\"好\",\"button_cancel\":\"取消\",\"download_action\":\"下载\",\"label_file_name\":\"文件名:\",\"label_content_type\":\"内容类型:\",\"label_size\":\"大小:\",\"chat_invitation\":\"你受邀开始新会话。你想怎么做?\",\"chat_invitation_accept\":\"接受\",\"chat_invitation_ignore\":\"忽略\",\"chat_invitation_block\":\"屏蔽\",\"error_invalid_id\":\"无效 ID\",\"group_user_id_prompt\":\"群组或用户 ID\",\"button_subscribe\":\"订阅\",\"topic_name_editing_placeholder\":\"群组自由格式名称\",\"button_create\":\"创建\",\"permission_join\":\"加入 ({val})\",\"permission_read\":\"读取 ({val})\",\"permission_write\":\"写入 ({val})\",\"permission_pres\":\"获取通知 ({val})\",\"permission_admin\":\"批准 ({val})\",\"permission_share\":\"分享 ({val})\",\"permission_delete\":\"删除 ({val})\",\"permission_owner\":\"所有者 ({val})\",\"title_permissions\":\"权限\",\"message_sending\":\"正在发送...\",\"message_sending_failed\":\"发送失败\",\"search_placeholder\":\"列表如 email:alice@example.com, tel:+17025550003...\",\"messaging_disabled_prompt\":\"消息已禁用\",\"new_message_prompt\":\"新消息\",\"file_attachment_too_large\":\"文件大小 {size} 超过 {limit} 限制。\",\"cannot_initiate_file_upload\":\"无法初始化文件上传。\",\"tags_not_found\":\"尚未定义标签。添加一些。\",\"tags_editor_no_tags\":\"添加一些标签\",\"title_manage_tags\":\"管理标签\",\"more_online_members\":\"还有{overflow}个\",\"label_user_contacts\":\"往来:\",\"validate_credential_action\":\"确认\",\"link_contact_us\":\"联系我们\",\"link_terms_of_service\":\"条款和条件\",\"link_privacy_policy\":\"隐私政策\",\"action_delete_messages\":\"删除所有帖子\",\"action_block_contact\":\"屏蔽联系人\",\"delete_messages_warning\":\"您确定要删除所有消息吗?无法撤消。\",\"leave_chat_warning\":\"您确定要退出此对话吗?\",\"block_contact_warning\":\"您确定要阻止此联系人吗?\",\"action_report_chat\":\"检举垃圾邮件\",\"report_chat_warning\":\"您确定要停止并报告此对话吗?\",\"action_clear_messages\":\"删除讯息\",\"clear_messages_warning\":\"您确定要清除所有消息吗?无法撤消。\",\"topic_delete_warning\":\"您确定要删除此对话吗?\",\"topic_block_warning\":\"您确定要阻止此对话吗?\",\"search_no_results\":\"搜索返回任何结果\",\"deleted_content\":\"内容已删除\",\"image_caption_prompt\":\"图片标题\",\"menu_item_send_retry\":\"重试\",\"label_incognito_mode\":\"无痕模式:\",\"delete_account\":\"删除帐户\",\"delete_account_arning\":\"您确定要删除您的帐户吗?无法撤消。\",\"button_delete_account\":\"删除帐户\",\"sidepanel_title_acc_security\":\"安全\",\"sidepanel_title_acc_notifications\":\"通知\",\"sidepanel_title_acc_support\":\"支持\",\"label_sdk\":\"开发包:\",\"label_server_address\":\"服务器地址:\",\"button_edit\":\"编辑\",\"button_add_another\":\"加上另一个\",\"sidepanel_title_acc_general\":\"常用设定\",\"blocked_contacts_link\":\"封锁的联络人 ({count})\",\"sidepanel_title_blocked\":\"被阻止的聊天\",\"push_init_failed\":\"初始化推送通知失败\",\"invalid_security_token\":\"无效的安全令牌\",\"no_connection\":\"无连接\",\"code_doesnot_match\":\"代码不匹配\",\"channel_prompt\":\"这是一个频道\",\"channel\":\"频道\"}}");
+
+/***/ }),
+
+/***/ "react":
+/*!************************!*\
+ !*** external "React" ***!
+ \************************/
+/***/ (function(module) {
+
+module.exports = React;
+
+/***/ }),
+
+/***/ "react-dom":
+/*!***************************!*\
+ !*** external "ReactDOM" ***!
+ \***************************/
+/***/ (function(module) {
+
+module.exports = ReactDOM;
+
+/***/ }),
+
+/***/ "react-intl":
+/*!****************************!*\
+ !*** external "ReactIntl" ***!
+ \****************************/
+/***/ (function(module) {
+
+module.exports = ReactIntl;
+
+/***/ }),
+
+/***/ "tinode-sdk":
+/*!*************************!*\
+ !*** external "Tinode" ***!
+ \*************************/
+/***/ (function(module) {
+
+module.exports = Tinode;
+
+/***/ }),
+
+/***/ "firebase/app":
+/*!***************************!*\
+ !*** external "firebase" ***!
+ \***************************/
+/***/ (function(module) {
+
+module.exports = firebase;
+
+/***/ }),
+
+/***/ "firebase/messaging":
+/*!*****************************************!*\
+ !*** external ["firebase","messaging"] ***!
+ \*****************************************/
+/***/ (function(module) {
+
+module.exports = firebase.messaging;
+
+/***/ })
+
+/******/ });
+/************************************************************************/
+/******/ // The module cache
+/******/ var __webpack_module_cache__ = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/ // Check if module is in cache
+/******/ if(__webpack_module_cache__[moduleId]) {
+/******/ return __webpack_module_cache__[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = __webpack_module_cache__[moduleId] = {
+/******/ // no module.id needed
+/******/ // no module.loaded needed
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/compat get default export */
+/******/ !function() {
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function() { return module['default']; } :
+/******/ function() { return module; };
+/******/ __webpack_require__.d(getter, { a: getter });
+/******/ return getter;
+/******/ };
+/******/ }();
+/******/
+/******/ /* webpack/runtime/define property getters */
+/******/ !function() {
+/******/ // define getter functions for harmony exports
+/******/ __webpack_require__.d = function(exports, definition) {
+/******/ for(var key in definition) {
+/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+/******/ }
+/******/ }
+/******/ };
+/******/ }();
+/******/
+/******/ /* webpack/runtime/hasOwnProperty shorthand */
+/******/ !function() {
+/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
+/******/ }();
+/******/
+/******/ /* webpack/runtime/make namespace object */
+/******/ !function() {
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/ }();
+/******/
+/************************************************************************/
+/******/ // startup
+/******/ // Load entry module
+/******/ __webpack_require__("./src/index.js");
+/******/ // This entry module used 'exports' so it can't be inlined
+/******/ })()
+;
//# sourceMappingURL=index.dev.js.map
\ No newline at end of file
diff --git a/umd/index.dev.js.map b/umd/index.dev.js.map
index 9833c0bc..6bca93e6 100644
--- a/umd/index.dev.js.map
+++ b/umd/index.dev.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack://tinode-webapp/./src/config.js","webpack://tinode-webapp/./src/index.js","webpack://tinode-webapp/./src/lib/blob-helpers.js","webpack://tinode-webapp/./src/lib/host-name.js","webpack://tinode-webapp/./src/lib/local-storage.js","webpack://tinode-webapp/./src/lib/navigation.js","webpack://tinode-webapp/./src/lib/strformat.js","webpack://tinode-webapp/./src/lib/utils.js","webpack://tinode-webapp/./src/version.js","webpack://tinode-webapp/./src/views/acc-general-view.jsx","webpack://tinode-webapp/./src/views/acc-notifications-view.jsx","webpack://tinode-webapp/./src/views/acc-security-view.jsx","webpack://tinode-webapp/./src/views/acc-support-view.jsx","webpack://tinode-webapp/./src/views/contacts-view.jsx","webpack://tinode-webapp/./src/views/create-account-view.jsx","webpack://tinode-webapp/./src/views/edit-account-view.jsx","webpack://tinode-webapp/./src/views/info-view.jsx","webpack://tinode-webapp/./src/views/login-view.jsx","webpack://tinode-webapp/./src/views/logo-view.jsx","webpack://tinode-webapp/./src/views/messages-view.jsx","webpack://tinode-webapp/./src/views/new-topic-view.jsx","webpack://tinode-webapp/./src/views/password-reset-view.jsx","webpack://tinode-webapp/./src/views/settings-view.jsx","webpack://tinode-webapp/./src/views/sidepanel-view.jsx","webpack://tinode-webapp/./src/views/tinode-web.jsx","webpack://tinode-webapp/./src/views/validation-view.jsx","webpack://tinode-webapp/./src/widgets/alert.jsx","webpack://tinode-webapp/./src/widgets/attachment.jsx","webpack://tinode-webapp/./src/widgets/avatar-upload.jsx","webpack://tinode-webapp/./src/widgets/button-back.jsx","webpack://tinode-webapp/./src/widgets/chat-message.jsx","webpack://tinode-webapp/./src/widgets/checkbox.jsx","webpack://tinode-webapp/./src/widgets/chip-input.jsx","webpack://tinode-webapp/./src/widgets/chip.jsx","webpack://tinode-webapp/./src/widgets/contact-action.jsx","webpack://tinode-webapp/./src/widgets/contact-badges.jsx","webpack://tinode-webapp/./src/widgets/contact-list.jsx","webpack://tinode-webapp/./src/widgets/contact.jsx","webpack://tinode-webapp/./src/widgets/context-menu.jsx","webpack://tinode-webapp/./src/widgets/doc-preview.jsx","webpack://tinode-webapp/./src/widgets/error-panel.jsx","webpack://tinode-webapp/./src/widgets/file-progress.jsx","webpack://tinode-webapp/./src/widgets/group-manager.jsx","webpack://tinode-webapp/./src/widgets/group-subs.jsx","webpack://tinode-webapp/./src/widgets/host-selector.jsx","webpack://tinode-webapp/./src/widgets/image-preview.jsx","webpack://tinode-webapp/./src/widgets/in-place-edit.jsx","webpack://tinode-webapp/./src/widgets/invitation.jsx","webpack://tinode-webapp/./src/widgets/letter-tile.jsx","webpack://tinode-webapp/./src/widgets/load-spinner.jsx","webpack://tinode-webapp/./src/widgets/menu-cancel.jsx","webpack://tinode-webapp/./src/widgets/menu-contacts.jsx","webpack://tinode-webapp/./src/widgets/menu-start.jsx","webpack://tinode-webapp/./src/widgets/more-button.jsx","webpack://tinode-webapp/./src/widgets/new-topic-by-id.jsx","webpack://tinode-webapp/./src/widgets/new-topic-group.jsx","webpack://tinode-webapp/./src/widgets/permissions-editor.jsx","webpack://tinode-webapp/./src/widgets/received-marker.jsx","webpack://tinode-webapp/./src/widgets/search-contacts.jsx","webpack://tinode-webapp/./src/widgets/send-message.jsx","webpack://tinode-webapp/./src/widgets/side-navbar.jsx","webpack://tinode-webapp/./src/widgets/tag-manager.jsx","webpack://tinode-webapp/./src/widgets/unread-badge.jsx","webpack://tinode-webapp/./src/widgets/uploading-image.jsx","webpack://tinode-webapp/./src/widgets/visible-password.jsx","webpack://tinode-webapp/external \"React\"","webpack://tinode-webapp/external \"ReactDOM\"","webpack://tinode-webapp/external \"ReactIntl\"","webpack://tinode-webapp/external \"Tinode\"","webpack://tinode-webapp/external \"firebase\"","webpack://tinode-webapp/external [\"firebase\",\"messaging\"]","webpack://tinode-webapp/webpack/bootstrap","webpack://tinode-webapp/webpack/runtime/compat get default export","webpack://tinode-webapp/webpack/runtime/define property getters","webpack://tinode-webapp/webpack/runtime/hasOwnProperty shorthand","webpack://tinode-webapp/webpack/runtime/make namespace object","webpack://tinode-webapp/webpack/startup"],"names":["APP_NAME","PACKAGE_VERSION","API_KEY","KNOWN_HOSTS","hosted","local","DEFAULT_HOST","LOGGING_ENABLED","KEYPRESS_DELAY","RECEIVED_DELAY","READ_DELAY","MIN_TAG_LENGTH","MAX_TAG_LENGTH","MAX_TAG_COUNT","DEFAULT_P2P_ACCESS_MODE","NEW_GRP_ACCESS_MODE","CHANNEL_ACCESS_MODE","NO_ACCESS_MODE","MEDIA_BREAKPOINT","REM_SIZE","AVATAR_SIZE","BROKEN_IMAGE_SIZE","MESSAGES_PAGE","MAX_INBAND_ATTACHMENT_SIZE","MAX_EXTERN_ATTACHMENT_SIZE","MAX_IMAGE_DIM","IMAGE_PREVIEW_DIM","MAX_ONLINE_IN_TOPIC","MAX_TITLE_LENGTH","LINK_CONTACT_US","LINK_PRIVACY_POLICY","LINK_TERMS_OF_SERVICE","params","HashNavigation","window","location","hash","language","hl","navigator","languages","userLanguage","baseLanguage","toLowerCase","split","messages","allMessages","ReactDOM","IntlProvider","locale","textComponent","React","document","getElementById","SUPPORTED_IMAGE_FORMATS","MIME_EXTENSIONS","makeImageUrl","photo","type","data","fitImageSize","width","height","maxWidth","maxHeight","forceSquare","Math","min","scale","size","dstWidth","dstHeight","srcWidth","srcHeight","xoffset","yoffset","fileNameForMime","fname","mime","idx","indexOf","ext","at","lastIndexOf","substring","imageScaled","fileOrBlob","maxSize","onSuccess","onError","img","Image","crossOrigin","onerror","err","onload","async","URL","revokeObjectURL","src","dim","this","canvas","createElement","ctx","getContext","imageSmoothingEnabled","drawImage","blob","Promise","resolve","toBlob","length","clearRect","name","createObjectURL","fileToBase64","file","reader","FileReader","addEventListener","result","readAsDataURL","blobToBase64","filePasted","event","onImageSuccess","onAttachmentSuccess","items","clipboardData","originalEvent","i","item","kind","getAsFile","console","log","imageFileScaledToBase64","imageFileToBase64","getMimeType","header","exec","base64EncodedLen","n","floor","base64DecodedLen","base64ReEncode","str","replace","btoa","atob","detectServerAddress","host","protocol","hostname","port","isSecureConnection","isLocalHost","LocalStorageUtil","key","value","localStorage","setItem","JSON","stringify","getItem","parse","oldVal","getObject","setObject","Object","assign","removeItem","parts","path","substr","forEach","part","decodeURIComponent","url","join","args","hasOwnProperty","push","parsed","parseUrlHash","composeUrlHash","sidepanel","topic","info","shortDateFormat","then","now","Date","getFullYear","getMonth","getDate","toLocaleTimeString","hour12","hour","minute","toLocaleDateString","month","day","year","secondsToTime","seconds","sec","bytesToHumanSize","bytes","sizes","bucket","log2","count","pow","round","toFixed","stringHash","charCodeAt","updateFavicon","oldIcon","head","getElementsByTagName","newIcon","id","rel","href","removeChild","appendChild","title","vcard","fn","imageDataUrl","card","trim","dataStart","arrayEqual","a","b","Array","isArray","sort","l","asPhone","val","test","asEmail","isUrlRelative","sanitizeUrl","allowedSchemes","schemes","RegExp","sanitizeImageUrl","sanitizedUrl","AccGeneralView","constructor","props","super","me","tinode","getMeTopic","state","fullName","public","undefined","avatar","tags","credentials","getCredentials","addCredActive","addCredInvalid","newCred","previousOnTags","onTagsUpdated","tnNewTags","bind","tnCredsUpdated","handleFullNameUpdate","handleImageChanged","handleCredChange","handleCredKeyDown","handleCredEntered","handleTagsUpdated","componentDidMount","onCredsUpdated","componentWillUnmount","setState","creds","onUpdateAccount","Tinode","e","target","keyCode","method","onCredAdd","slice","onUpdateTags","render","map","cred","meth","done","onClick","preventDefault","onCredConfirm","FormattedMessage","defaultMessage","onCredDelete","className","full_name_placeholder","placeholder","onFinished","uid","myUserId","onImageChanged","title_tag_manager","activated","onSubmit","required","autoFocus","onChange","onKeyDown","onBlur","EditAccountView","handleCheckboxClick","what","checked","onToggleMessageSounds","onTogglePushNotifications","onToggleIncognitoMode","htmlFor","messageSounds","desktopAlertsEnabled","desktopAlerts","incognitoMode","defineMessages","delete_account","delete_account_warning","AccSecurityView","blockedCount","contacts","c","acs","isJoiner","defacs","getDefaultAccess","auth","anon","showPermissionEditorFor","handlePasswordUpdate","handleLaunchPermissionsEditor","handleHidePermissionsEditor","handlePermissionsChanged","handleDeleteAccount","pwd","password","which","editedPermissions","perm","newState","formatMessage","intl","onShowAlert","onDeleteAccount","mode","skip","onCancel","password_unchanged","onLogout","onShowBlocked","values","injectIntl","AccSupportView","serverVersion","serverAddress","archived_contacts_title","ContactsView","handleAction","deriveStateFromProps","unreadThreads","archivedCount","chatList","blocked","private","arch","archive","unread","touched","action","contactList","componentDidUpdate","prevProps","prevState","action_ignored","onShowArchive","no_contacts","connected","emptyListMessage","topicSelected","showOnline","showUnread","onTopicSelected","showContextMenu","onAction","CreateAccountView","login","email","errorCleared","saveToken","handleLoginChange","handlePasswordChange","handleEmailChange","handleFnChange","handleToggleSaveToken","handleSubmit","onCreateAccount","submitClasses","disabled","login_prompt","autoComplete","password_prompt","full_name_prompt","email_prompt","stay_logged_in","readOnly","owner","onBasicNavigate","requested","granted","edit_permissions","other_user","clear_messages","clear_messages_warning","delete_messages","delete_messages_warning","leave_chat","leave_chat_warning","block_contact","block_contact_warning","report_chat","report_chat_warning","InfoView","admin","sharer","deleter","muted","address","groupTopic","channel","selectedContact","access","modeGiven","modeWant","modeGiven2","modeWant2","showMemberPanel","moreInfoExpanded","previousMetaDesc","previousSubsUpdated","previousTagsUpdated","resetSubs","resetDesc","onMetaDesc","onSubsUpdated","handlePrivateUpdate","handleMuted","handleShowAddMembers","handleHideAddMembers","handleMemberUpdateRequest","handleDeleteMessages","handleLeave","handleBlock","handleReport","handleMemberSelected","handleMoreInfo","handleContextMenu","getTopic","getType","user2","subscriber","getGiven","getWant","subscribers","sub","getAccessMode","isOwner","isAdmin","isSharer","isDeleter","isMuted","comment","isChannel","getMode","getMeta","startMetaQuery","withTags","build","desc","subs","onTopicDescUpdate","ignored","onChangePermissions","userPermissionsEdited","toEdit","toCompare","toSkip","titleEdit","titleCompare","userTitle","userAvatar","user","userPermissionsTitle","userPermissionsAvatar","immutablePermissions","editedPermissionsTitle","immutablePermissionsTitle","editedPermissionsSkipped","onInitFind","members","added","removed","onMemberUpdateRequest","onDeleteMessages","onLeaveTopic","onBlockTopic","onReportTopic","open","onTopicTagsUpdate","instance","topicName","menuItems","handler","x","y","displayMobile","level","errorLevel","text","errorText","onClearError","requiredMember","keepInitialMembers","searchableContacts","compare","modeTitle","compareTitle","private_placeholder","more","onToggle","no_members","showMode","noScroll","LoginView","hostName","onLogin","autoCorrect","autoCapitalize","LogoView","version","alt","Drafty","isUnconfirmed","ex","getExcessive","includes","isPeerRestricted","ms","getMissing","MessagesView","getDerivedStateFromProps","leave","sendImageAttachment","sendFileAttachment","sendKeyPress","handleScrollReference","handleScrollEvent","handleDescChange","handleSubsUpdated","handleNewMessage","handleAllMessagesReceived","handleInfoReceipt","handleImagePostview","handleClosePreview","handleFormResponse","handleContextClick","handleShowContextMenuMessage","handleNewChatAcceptance","handleEnablePeer","handleAttachFile","handleAttachImage","handleCancelUpload","postReadNotification","clearNotificationQueue","readNotificationQueue","readNotificationTimer","messagesScroller","removeEventListener","scrollTop","scrollHeight","scrollPosition","viewportHeight","onData","onAllMessagesReceived","onInfo","onPres","applicationVisible","isSubscribed","ready","newTopic","newTopicParams","_topicName","getQuery","withLaterDesc","withLaterSub","isReader","withLaterData","withLaterDel","fetchingMessages","setQuery","subscribe","ctrl","code","onNewTopicCreated","queuedMessages","pub","_sending","publishMessage","catch","message","blankState","not_found","nextProps","nextState","docPreview","imagePreview","imagePostview","typingIndicator","msgs","online","msg","deleted","onlineSubs","peer","p2pPeerDesc","peerMessagingDisabled","isWriter","readingBlocked","unconformed","unconfirmed","oldTopicName","oldTopic","finally","node","msgHasMoreMessages","getMessagesPage","seq","setInterval","clearInterval","shift","sendAt","max","noteRead","setMilliseconds","getMilliseconds","m","isNewMessage","msgStatus","from","clearTimeout","keyPressTimer","setTimeout","forceUpdate","content","sendMessage","attachJSON","ref","searchParams","resp","set","search","stopPropagation","pageY","pageX","messageSpecificMenuItems","onNewChat","noteKeyPress","maxInbandAttachmentSize","getServerLimit","uploader","getLargeFileHelper","cannot_initiate_upload","uploadCompletionPromise","upload","attachFile","filename","urlPromise","bits","maxExternAttachmentSize","limit","caption","tinyBlob","blobMime","tinyBits64","insertImage","_tempPreview","appendLineBreak","append","init","bits64","preview","found","find","_cancelled","cancel","component","hideSelf","component2","onClose","onSendMessage","messageNodes","previousFrom","chatBoxClass","nextFrom","sequence","thisFrom","isReply","deliveryStatus","userName","userFrom","userDesc","hi","mimeType","timestamp","ts","response","received","_uploader","viewportWidth","onImagePreview","onFormResponse","onCancelUpload","lastSeen","cont","getContact","online_now","seen","last_seen","when","onHideMessagesView","show","onKeyPress","onAttachFile","onAttachImage","search_for_contacts","search_no_results","NewTopicView","tabSelected","searchQuery","handleTabClick","handleSearchContacts","handleContactSelected","handleNewGroupSubmit","handleGroupByID","currentTarget","dataset","query","onSearchContacts","sel","onCreateTopic","dataUrl","priv","no_contacts_placeholder","data-id","searchResults","PasswordResetView","token","scheme","onReset","onRequest","reset","SettingsView","transport","handleTransportSelected","handleServerAddressChange","onUpdate","names","def","ws","lp","transportOptions","onServerAddressChange","SidepanelView","handleLoginRequested","handleNewTopic","onLoginRequest","view","onSignUp","onSettings","onNewTopic","errorAction","actionText","errorActionText","loadSpinnerVisible","loginDisabled","onGlobalSettings","onUpdateAccountTags","credCode","credMethod","onValidateCredentials","onPasswordResetRequest","onResetPassword","POP_SOUND","Audio","reconnect_countdown","reconnect_now","push_init_failed","invalid_security_token","no_connection","code_doesnot_match","TinodeWeb","getBlankState","handleResize","handleHashRoute","handleOnline","checkForAppUpdate","handleVisibilityEvent","handleError","handleLoginRequest","handleConnected","handleAutoreconnectIteration","doLogin","handleCredentialsRequest","handleLoginSuccessful","handleDisconnect","tnMeMetaDesc","tnMeContactUpdate","tnMeSubsUpdated","resetContactList","tnData","tnInitFind","tnFndSubsUpdated","handleTopicSelected","handleHideMessagesView","handleSendMessage","handleNewChatInvitation","handleNewAccount","handleNewAccountRequest","handleUpdateAccountRequest","handleUpdateAccountTagsRequest","handleToggleIncognitoMode","handleSettings","handleGlobalSettings","handleShowArchive","handleShowBlocked","handleToggleMessageSounds","handleCredAdd","handleCredDelete","handleCredConfirm","initDesktopAlerts","togglePushToken","requestPushToken","handleSidepanelCancel","handleStartTopicRequest","handleNewTopicCreated","handleTopicUpdateRequest","handleChangePermissions","handleLogout","handleDeleteMessagesRequest","handleLeaveUnsubRequest","handleBlockTopicRequest","handleReportTopic","handleShowContextMenu","defaultTopicContextMenu","handleHideContextMenu","handleShowAlert","handleShowInfoView","handleHideInfoView","handleValidateCredentialsRequest","handlePasswordResetRequest","handleResetPassword","handleContextMenuAction","settings","autoLogin","messageSoundsOff","firebase","FIREBASE_INIT","firebaseToken","hidden","sidePanelSelected","sidePanelTitle","sidePanelAvatar","liveConnection","onLine","topicSelectedOnline","topicSelectedAcs","innerWidth","showInfoPanel","mobilePanel","contextMenuVisible","contextMenuBounds","contextMenuClickAt","contextMenuParams","contextMenuItems","alertVisible","alertParams","documentElement","clientWidth","clientHeight","tnSetup","onConnect","onDisconnect","onAutoreconnectIteration","fbPush","messaging","usePublicVapidKey","messagingVapidKey","serviceWorker","register","reg","useServiceWorker","active","postMessage","setDeviceToken","parsedNav","expires","setAuthToken","connect","tab","readTimer","readTimerCallback","setHumanLanguage","enableLogging","mobile","onupdatefound","installingWorker","installing","onstatechange","controller","newTopicTabSelected","isConnected","getServerInfo","ver","prom","reconnectCountdown","timeLeft","reconnect","isAuthenticated","promise","getAuthToken","loginBasic","loginToken","onContactUpdate","getCurrentUserID","withDesc","withCred","disconnect","isPresencer","archived","isArchived","play","unused","foundContacts","merged","updated","prepareSearchableContacts","receivedTimer","noteRecv","fnd","getFndTopic","withSub","s","setMeta","isTopicOnline","getTopicAccessMode","createMessage","publishDraft","isP2P","delTopic","am","updateWant","login_","password_","public_","cred_","tags_","createAccountBasic","updateAccountBasic","getCurrentLogin","on","onTokenRefresh","onMessage","payload","enabled","requestPermission","deleteToken","getToken","refreshedToken","delCredential","basicNavigator","isTopicCached","newGroupTopicName","oldName","newName","permissions","updateGiven","delCurrentUser","delMessagesAll","updateMode","publish","getBoundingClientRect","self_blocked","subscribed","onConfirm","confirmText","onReject","rejectText","confirm","reject","invite","delSubscription","requestResetAuthSecret","newPassword","bounds","clickAt","hide","onTopicRemoved","visible","onAddMember","handleManageGroupMembers","phone","ValidationView","handleChange","handleKeyPress","handleCancel","numbers_only","Alert","Attachment","downloader","progress","downloadFile","mimetype","download","loaded","uploading","helperFunc","downloadUrl","downloadWidget","AvatarUpload","handleFileUpload","files","base64bits","du","randId","random","accept","ButtonBack","onBack","ChatMessage","onProgress","handleProgress","handleImagePreview","handleFormButtonClick","act","MESSAGE_STATUS_FAILED","ratio","sideClass","bubbleClass","fullDisplay","attachments","att","draftyFormatter","notFound","style","el","attr","UploadingImage","authorizeURL","inner","child","CheckBox","ChipInput","input","focused","handleTextInput","removeChipAt","handleChipCancel","handleFocusGained","handleFocusLost","handleKeyDown","chips","prompt","sortedChips","sortChips","staticMembers","chipIndex","indexChips","index","keep","normal","concat","filterFunc","onChipRemoved","onFocusLost","onEnter","noAvatar","avatarDisabled","invalid","onFocus","Chip","ContactAction","handleClick","icon_mapping","ContactBadges","badges","icon","color","badge_you","badge_owner","ContactList","showCheckmark","contactNodes","contactsCount","filter","selected","onSelected","dangerouslySetInnerHTML","__html","Contact","icon_badges","clear_for_all","delete_for_all","send_retry","mute","unmute","topic_delete","topic_delete_warning","unblock","block","topic_block_warning","member_delete","ContextMenu","handlePageClick","handleEscapeKey","MenuItems","errorHandler","menu_item_clear_messages","deleteMessages","menu_item_clear_messages_for_all","delete","retryMessage","topicPermissionSetter","menu_item_block","menu_item_delete_topic","contains","all","hard","cancelSend","delMessagesList","flushMessage","menu","hSize","vSize","position","left","right","top","bottom","DocPreview","handleSendDoc","mimeToIcon","default","image","video","iconFromMime","noInput","ErrorPanel","warn","whiteSpace","FileProgress","contacts_not_found_short","GroupManager","indexMembers","contactFilter","noContactsMessage","selectedContacts","handleMemberRemoved","handleContactFilter","delta","present","keepInitial","stat","userId","status","splice","keys","k","doContactFiltering","GroupSubs","usersOnline","totalCount","countToShow","some","overflow","HostSelector","changed","handleHostNameChange","handleEditingFinished","hostOptions","list","ImagePreview","handleSendImage","assignWidth","maxlength","messagePrompt","acceptBlank","InPlaceEdit","initialValue","handeTextChange","handleStartEditing","handlePasswordFinished","newValue","focus","checkValidity","fieldType","spanText","spanClass","Invitation","handleButtonAction","evt","LetterTile","isGroup","iconColor","abs","letter","charAt","LoadSpinner","MenuCancel","MenuContacts","MenuStart","MoreButton","handleToggle","invalid_id","NewTopicById","groupId","NewTopicGroup","handlePrivateChange","handleTagsChanged","handleChannelToggle","onTagsChanged","PermissionsEditor","joiner","writer","preser","approver","ReceivedMarker","sending","failed","marker","SearchContacts","edited","handleSearchChange","handleSearch","handleClear","search_placeholder","SendMessage","keypressTimestamp","getTime","handlePasteEvent","handleSend","handleMessageTyping","messageEditArea","shiftKey","messaging_disabled","type_new_message","attachImage","click","display","SideNavbar","TagManager","tagInput","handleTagInput","handleAddTag","handleRemoveTag","last","tag","maxTagCount","minTagLength","maxTagLength","add_tags_prompt","defautMessage","UnreadBadge","VisiblePassword","handleVisibility","activeElement","tabIndex","module","exports","ReactIntl","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__","getter","__esModule","d","definition","o","defineProperty","enumerable","get","obj","prop","prototype","call","r","Symbol","toStringTag"],"mappings":"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","file":"index.dev.js","sourcesContent":["import { PACKAGE_VERSION } from './version.js';\n\n// Name of this application, used in the User-Agent.\nexport const APP_NAME = 'TinodeWeb/' + (PACKAGE_VERSION || '0.16');\n\n// API key. Use https://github.com/tinode/chat/tree/master/keygen to generate your own\nexport const API_KEY = 'AQEAAAABAAD_rAp4DJh05a1HAwFT3A6K';\n\n// The array of possible hosts to connect to.\nexport const KNOWN_HOSTS = {hosted: 'web.tinode.co', local: 'localhost:6060'};\n\n// Default host name and port to connect to.\nexport const DEFAULT_HOST = KNOWN_HOSTS.hosted;\n\n// Enable console logging.\nexport const LOGGING_ENABLED = true;\n\n// Minimum time between two keypress notifications, milliseconds.\nexport const KEYPRESS_DELAY = 3*1000;\n// Delay before sending a {note} for reciving a message, milliseconds.\nexport const RECEIVED_DELAY = 500;\n// Delay before sending a read notification, milliseconds.\nexport const READ_DELAY = 1000;\n\n// The shortest allowed tag length. Matches the value on the server.\nexport const MIN_TAG_LENGTH = 2;\n// The greatest allowed tag length. Matches the value on the server.\nexport const MAX_TAG_LENGTH = 96;\n// The maximum number of tags allowed. Matches the value on the server.\nexport const MAX_TAG_COUNT = 16;\n\n// Access mode for P2P subscriptions initiated by the current user.\nexport const DEFAULT_P2P_ACCESS_MODE = 'JRWPS';\n// Access mode for new group topics created by the current user.\nexport const NEW_GRP_ACCESS_MODE = 'JRWPSAO';\n// Access mode for a channel.\nexport const CHANNEL_ACCESS_MODE = 'JR';\n\n// Access mode for no access.\nexport const NO_ACCESS_MODE = 'N';\n\n// Mediaquery breakpoint between desktop and mobile, in px. Should match the value\n// in @media (max-size: 640px) in base.css\nexport const MEDIA_BREAKPOINT = 640;\n// Size of css 'rem' unit in pixels. Default 1rem = 10pt = 13px.\nexport const REM_SIZE = 13;\n\n// Size of the avatar image: When an avatar image is uploaded, it's resized to\n// a square of this size.\nexport const AVATAR_SIZE = 128;\n\n// Size of the broken_image shown in MessagesView\nexport const BROKEN_IMAGE_SIZE = 32;\n\n// Number of chat messages to fetch in one call.\nexport const MESSAGES_PAGE = 24;\n\n// Default maximum in-band (included directly into the message) attachment size which fits into\n// a message of 256K in size. The actual binary size of the attachment should be smaller due to\n// base64 encoding expansion and some overhead, for instance 1024 bytes.\n// Increase this limit to a greater value in production, if desired. Also increase\n// max_message_size in the server config.\nexport const MAX_INBAND_ATTACHMENT_SIZE = 262144;\n\n// Absolute maximum attachment size to be used with the server = 8MB. Increase to\n// something like 100MB in production.\nexport const MAX_EXTERN_ATTACHMENT_SIZE = 1 << 23;\n\n// Maximum allowed linear dimension of an inline image in pixels. Larer images will be shrunk\n// to make the larger dimension fit under this size. You may want to adjust it to 1600 or\n// 2400 for production.\nexport const MAX_IMAGE_DIM = 1024;\n\n// Linear dimensions of image preview: shrink image under this size for previews.\nexport const IMAGE_PREVIEW_DIM = 64;\n\n// Maximum number of online users to be shown in a topic title bar. Others will be\n// hidden under \"+X more\"\nexport const MAX_ONLINE_IN_TOPIC = 4;\n\n// Maximum length of user name, topic title, and private comment.\nexport const MAX_TITLE_LENGTH = 60;\n\n// Link for \"Contact Us\".\nexport const LINK_CONTACT_US = 'email:info@tinode.co';\n\n// Link to Privacy Policy.\nexport const LINK_PRIVACY_POLICY = 'https://tinode.co/privacy.html';\n\n// Link to Terms of Service.\nexport const LINK_TERMS_OF_SERVICE = 'https://tinode.co/terms.html';\n","// Put all packages together.\n// Used to generate umd/index.prod.js\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { IntlProvider } from 'react-intl';\n\nimport allMessages from './messages.json';\nimport TinodeWeb from './views/tinode-web.jsx';\nimport HashNavigation from './lib/navigation.js';\n\n// Detect human language to use in the UI:\n// Check parameters from URL hash #?hl=ru, then browser, then use 'en' as a fallback.\nconst { params } = HashNavigation.parseUrlHash(window.location.hash);\nconst language = (params && params.hl) ||\n (navigator.languages && navigator.languages[0]) ||\n navigator.language ||\n navigator.userLanguage ||\n 'en';\n\n// Get the base language 'en' from a more specific 'en_GB' or 'en-US' as a partial fallback.\nconst baseLanguage = language.toLowerCase().split(/[-_]/)[0];\n\n// Try the full locale first, then the locale without the region code, fallback to 'en'.\nconst messages =\n allMessages[language] ||\n allMessages[baseLanguage] ||\n allMessages.en;\n\nReactDOM.render(\n field: the URL must be a relative URL or\n// have http:, https:, blob: or data: scheme.\n// The relative URL is appended with the API key and/or auth token.\n// In case of data: scheme, the URL must start with a 'data:image/XXXX;base64,'.\nexport function sanitizeImageUrl(url) {\n if (!url) {\n return null;\n }\n\n const sanitizedUrl = sanitizeUrl(url);\n if (sanitizedUrl) {\n return sanitizedUrl;\n }\n\n // Is this a data: URL of an image?\n if (/data:image\\/[a-z0-9.-]+;base64,/i.test(url.trim())) {\n return url;\n }\n\n return null;\n}\n","// This is a generated file. Don't edit.\n\nexport const PACKAGE_VERSION = \"0.16.10\";\n","// Edit account parameters.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport Tinode from 'tinode-sdk';\n\nimport AvatarUpload from '../widgets/avatar-upload.jsx';\nimport InPlaceEdit from '../widgets/in-place-edit.jsx';\nimport TagManager from '../widgets/tag-manager.jsx';\n\nimport { MAX_TITLE_LENGTH } from '../config.js';\nimport { makeImageUrl } from '../lib/blob-helpers.js';\nimport { arrayEqual, asEmail, asPhone, vcard } from '../lib/utils.js';\n\nexport default class AccGeneralView extends React.Component {\n constructor(props) {\n super(props);\n\n const me = this.props.tinode.getMeTopic();\n this.state = {\n fullName: me.public ? me.public.fn : undefined,\n avatar: makeImageUrl(me.public ? me.public.photo : null),\n tags: me.tags(),\n credentials: me.getCredentials() || [],\n addCredActive: false,\n addCredInvalid: false,\n newCred: '',\n previousOnTags: me.onTagsUpdated\n };\n\n this.tnNewTags = this.tnNewTags.bind(this);\n this.tnCredsUpdated = this.tnCredsUpdated.bind(this);\n this.handleFullNameUpdate = this.handleFullNameUpdate.bind(this);\n this.handleImageChanged = this.handleImageChanged.bind(this);\n this.handleCredChange = this.handleCredChange.bind(this);\n this.handleCredKeyDown = this.handleCredKeyDown.bind(this);\n this.handleCredEntered = this.handleCredEntered.bind(this);\n this.handleTagsUpdated = this.handleTagsUpdated.bind(this);\n }\n\n componentDidMount() {\n const me = this.props.tinode.getMeTopic();\n me.onCredsUpdated = this.tnCredsUpdated;\n me.onTagsUpdated = this.tnNewTags;\n }\n\n componentWillUnmount() {\n const me = this.props.tinode.getMeTopic();\n me.onTagsUpdated = this.state.previousOnTags;\n me.onCredsUpdated = undefined;\n }\n\n tnNewTags(tags) {\n this.setState({tags: tags});\n }\n\n tnCredsUpdated(creds) {\n this.setState({credentials: creds || []});\n }\n\n handleFullNameUpdate(fn) {\n fn = fn.trim().substring(0, MAX_TITLE_LENGTH);\n if (fn) {\n this.setState({fullName: fn});\n this.props.onUpdateAccount(undefined, vcard(fn, null));\n }\n }\n\n handleImageChanged(img) {\n this.setState({avatar: img});\n this.props.onUpdateAccount(undefined, vcard(null, img || Tinode.DEL_CHAR));\n }\n\n handleCredChange(e) {\n this.setState({newCred: e.target.value, addCredInvalid: false});\n }\n\n handleCredKeyDown(e) {\n if (e.keyCode === 27) {\n // Escape pressed\n this.setState({newCred: '', addCredActive: false});\n } else if (e.keyCode === 13) {\n // Enter pressed\n this.handleCredEntered(e);\n }\n }\n\n handleCredEntered(e) {\n let value = this.state.newCred.trim();\n if (!value) {\n this.setState({addCredActive: false, addCredInvalid: false});\n return;\n }\n\n let val = asPhone(value);\n let method;\n if (val) {\n method = 'tel';\n } else {\n val = asEmail(value);\n if (val) {\n method = 'email';\n }\n }\n if (method) {\n this.props.onCredAdd(method, val);\n this.setState({addCredActive: false, newCred: ''});\n } else {\n this.setState({addCredInvalid: true});\n }\n }\n\n handleTagsUpdated(tags) {\n // Check if tags have actually changed.\n if (arrayEqual(this.state.tags.slice(0), tags.slice(0))) {\n return;\n }\n this.props.onUpdateTags(tags);\n }\n\n render() {\n const credentials = [];\n this.state.credentials.map((cred) => {\n credentials.push(
\n {messageNodes}\n
\n :\n this.props.readOnly && this.props.uid ?\n
.\n el = UploadingImage;\n }\n }\n break;\n case 'BN':\n // Button\n attr.onClick = this.handleFormButtonClick;\n let inner = React.Children.map(values, (child) => {\n return typeof child == 'string' ? child : undefined;\n });\n if (!inner || inner.length == 0) {\n inner = [attr.name]\n }\n // Get text which will be sent back when the button is clicked.\n attr['data-title'] = inner.join('');\n break;\n case 'FM':\n // Form\n attr.className = 'bot-form';\n break;\n case 'FE':\n // Form element formatting is dependent on element content.\n break;\n }\n return React.createElement(el, attr, values);\n } else {\n return values;\n }\n};\n","import React from 'react';\n\n/* BEGIN CheckBox: styled checkbox */\nexport default class CheckBox extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.handleChange = this.handleChange.bind(this);\n }\n\n handleChange() {\n this.props.onChange(this.props.name, !this.props.checked);\n }\n\n render() {\n return (\n this.props.onChange ? (\n this.props.checked ?\n check_box :\n check_box_outline_blank\n ) : (\n this.props.checked ?\n check_box :\n check_box_outline_blank\n )\n );\n }\n}\n/* END CheckBox */\n","import React from 'react';\n\nimport Chip from './chip.jsx';\n\nimport { makeImageUrl } from '../lib/blob-helpers.js';\n\n/* BEGIN ChipInput: group membership widget */\nexport default class ChipInput extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = ChipInput.deriveStateFromProps(props);\n this.state.input = '';\n this.state.focused = false;\n\n this.handleTextInput = this.handleTextInput.bind(this);\n this.removeChipAt = this.removeChipAt.bind(this);\n this.handleChipCancel = this.handleChipCancel.bind(this);\n this.handleFocusGained = this.handleFocusGained.bind(this);\n this.handleFocusLost = this.handleFocusLost.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n }\n\n static deriveStateFromProps(props) {\n return {\n placeholder: props.chips ? '' : props.prompt,\n sortedChips: ChipInput.sortChips(props.chips, props.staticMembers),\n chipIndex: ChipInput.indexChips(props.chips)\n };\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (prevProps.chips != this.props.chips ||\n prevProps.staticMembers != this.props.staticMembers ||\n prevProps.prompt != this.props.prompt) {\n this.setState(ChipInput.deriveStateFromProps(this.props));\n }\n if (!prevState || this.props.chips.length > prevState.sortedChips.length) {\n this.setState({input: ''});\n }\n }\n\n // Map chip index to user name\n static indexChips(chips) {\n const index = {};\n let count = 0;\n chips.map((item) => {\n index[item.user] = count;\n count ++;\n });\n return index;\n }\n\n // Have non-removable chips appear before all other chips.\n static sortChips(chips, keep) {\n const required = [];\n const normal = [];\n chips.map((item) => {\n if (keep && keep.includes(item.user)) {\n required.push(item);\n } else {\n normal.push(item);\n }\n });\n return required.concat(normal);\n }\n\n handleTextInput(e) {\n this.setState({input: e.target.value});\n if (this.props.filterFunc) {\n this.props.filterFunc(e.target.value);\n }\n }\n\n removeChipAt(idx) {\n const removed = this.state.sortedChips[idx];\n this.props.onChipRemoved(removed.user, this.state.chipIndex[removed.user]);\n }\n\n handleChipCancel(item, idx) {\n this.removeChipAt(idx);\n }\n\n handleFocusGained() {\n this.setState({focused: true});\n }\n\n handleFocusLost() {\n this.setState({focused: false});\n if (this.props.onFocusLost) {\n this.props.onFocusLost(this.state.input);\n }\n }\n\n handleKeyDown(e) {\n if (e.key === 'Backspace') {\n if (this.state.input.length == 0 && this.state.sortedChips.length > 0) {\n const at = this.state.sortedChips.length - 1;\n if (this.state.sortedChips[at].user !== this.props.staticMembers) {\n this.removeChipAt(at);\n }\n }\n } else if (e.key === 'Enter') {\n if (this.props.onEnter) {\n this.props.onEnter(this.state.input);\n }\n } else if (e.key === 'Escape') {\n if (this.props.onCancel) {\n this.props.onCancel();\n }\n }\n }\n\n render() {\n const chips = [];\n let count = 0;\n const staticMembers = this.props.staticMembers || [];\n this.state.sortedChips.map((item) => {\n chips.push(\n
\n {contactNodes}\n
\n :\n null\n }\n
: null}\n \n {menu}\n
\n );\n }\n}\n\nexport default injectIntl(ContextMenu);\n","import React from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport SendMessage from '../widgets/send-message.jsx';\n\nimport { bytesToHumanSize } from '../lib/strformat.js';\n\n// Get material icon name from mime type.\nfunction iconFromMime(mime) {\n // If more icons become available in material icons, add them to this mime-to-icon mapping.\n const mimeToIcon = {default: 'insert_drive_file', image: 'image', text: 'description', video: 'theaters'};\n\n return mimeToIcon[mime] || mimeToIcon[(mime || '').split('/')[0]] || mimeToIcon['default'];\n}\n\nexport default class DocPreview extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.handleSendDoc = this.handleSendDoc.bind(this);\n }\n\n handleSendDoc(caption) {\n this.props.onClose();\n this.props.onSendMessage(this.props.content.file);\n }\n\n render() {\n if (!this.props.content) {\n return null;\n }\n return (\n \n
{e.target.onerror = null; e.target.src=\"/img/broken_image.png\"}} />;\n } else {\n avatar = null;\n }\n return avatar;\n }\n}\n","import React from 'react';\n\nexport default class LoadSpinner extends React.PureComponent {\n render() {\n return (this.props.show ?\n
\n \n );\n }\n\n return (\n {names[c]} \n {skip.indexOf(c) < 0 ?\n {this.props.compare ? \n : null}\n
: null}\n \n \n {this.props.compare ?\n
\n \n :\n null}\n \n {items}\n {this.props.modeTitle} \n {this.props.compareTitle} \n
\n field: the URL must be a relative URL or\n// have http:, https:, blob: or data: scheme.\n// The relative URL is appended with the API key and/or auth token.\n// In case of data: scheme, the URL must start with a 'data:image/XXXX;base64,'.\nexport function sanitizeImageUrl(url) {\n if (!url) {\n return null;\n }\n\n const sanitizedUrl = sanitizeUrl(url);\n if (sanitizedUrl) {\n return sanitizedUrl;\n }\n\n // Is this a data: URL of an image?\n if (/data:image\\/[a-z0-9.-]+;base64,/i.test(url.trim())) {\n return url;\n }\n\n return null;\n}\n","// This is a generated file. Don't edit.\n\nexport const PACKAGE_VERSION = \"0.16.10\";\n","// Edit account parameters.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport Tinode from 'tinode-sdk';\n\nimport AvatarUpload from '../widgets/avatar-upload.jsx';\nimport InPlaceEdit from '../widgets/in-place-edit.jsx';\nimport TagManager from '../widgets/tag-manager.jsx';\n\nimport { MAX_TITLE_LENGTH } from '../config.js';\nimport { makeImageUrl } from '../lib/blob-helpers.js';\nimport { arrayEqual, asEmail, asPhone, vcard } from '../lib/utils.js';\n\nexport default class AccGeneralView extends React.Component {\n constructor(props) {\n super(props);\n\n const me = this.props.tinode.getMeTopic();\n this.state = {\n fullName: me.public ? me.public.fn : undefined,\n avatar: makeImageUrl(me.public ? me.public.photo : null),\n tags: me.tags(),\n credentials: me.getCredentials() || [],\n addCredActive: false,\n addCredInvalid: false,\n newCred: '',\n previousOnTags: me.onTagsUpdated\n };\n\n this.tnNewTags = this.tnNewTags.bind(this);\n this.tnCredsUpdated = this.tnCredsUpdated.bind(this);\n this.handleFullNameUpdate = this.handleFullNameUpdate.bind(this);\n this.handleImageChanged = this.handleImageChanged.bind(this);\n this.handleCredChange = this.handleCredChange.bind(this);\n this.handleCredKeyDown = this.handleCredKeyDown.bind(this);\n this.handleCredEntered = this.handleCredEntered.bind(this);\n this.handleTagsUpdated = this.handleTagsUpdated.bind(this);\n }\n\n componentDidMount() {\n const me = this.props.tinode.getMeTopic();\n me.onCredsUpdated = this.tnCredsUpdated;\n me.onTagsUpdated = this.tnNewTags;\n }\n\n componentWillUnmount() {\n const me = this.props.tinode.getMeTopic();\n me.onTagsUpdated = this.state.previousOnTags;\n me.onCredsUpdated = undefined;\n }\n\n tnNewTags(tags) {\n this.setState({tags: tags});\n }\n\n tnCredsUpdated(creds) {\n this.setState({credentials: creds || []});\n }\n\n handleFullNameUpdate(fn) {\n fn = fn.trim().substring(0, MAX_TITLE_LENGTH);\n if (fn) {\n this.setState({fullName: fn});\n this.props.onUpdateAccount(undefined, vcard(fn, null));\n }\n }\n\n handleImageChanged(img) {\n this.setState({avatar: img});\n this.props.onUpdateAccount(undefined, vcard(null, img || Tinode.DEL_CHAR));\n }\n\n handleCredChange(e) {\n this.setState({newCred: e.target.value, addCredInvalid: false});\n }\n\n handleCredKeyDown(e) {\n if (e.keyCode === 27) {\n // Escape pressed\n this.setState({newCred: '', addCredActive: false});\n } else if (e.keyCode === 13) {\n // Enter pressed\n this.handleCredEntered(e);\n }\n }\n\n handleCredEntered(e) {\n let value = this.state.newCred.trim();\n if (!value) {\n this.setState({addCredActive: false, addCredInvalid: false});\n return;\n }\n\n let val = asPhone(value);\n let method;\n if (val) {\n method = 'tel';\n } else {\n val = asEmail(value);\n if (val) {\n method = 'email';\n }\n }\n if (method) {\n this.props.onCredAdd(method, val);\n this.setState({addCredActive: false, newCred: ''});\n } else {\n this.setState({addCredInvalid: true});\n }\n }\n\n handleTagsUpdated(tags) {\n // Check if tags have actually changed.\n if (arrayEqual(this.state.tags.slice(0), tags.slice(0))) {\n return;\n }\n this.props.onUpdateTags(tags);\n }\n\n render() {\n const credentials = [];\n this.state.credentials.map((cred) => {\n credentials.push(
\n {messageNodes}\n
\n :\n this.props.readOnly && this.props.uid ?\n
.\n el = UploadingImage;\n }\n }\n break;\n case 'BN':\n // Button\n attr.onClick = this.handleFormButtonClick;\n let inner = React.Children.map(values, (child) => {\n return typeof child == 'string' ? child : undefined;\n });\n if (!inner || inner.length == 0) {\n inner = [attr.name]\n }\n // Get text which will be sent back when the button is clicked.\n attr['data-title'] = inner.join('');\n break;\n case 'FM':\n // Form\n attr.className = 'bot-form';\n break;\n case 'FE':\n // Form element formatting is dependent on element content.\n break;\n }\n return React.createElement(el, attr, values);\n } else {\n return values;\n }\n};\n","import React from 'react';\n\n/* BEGIN CheckBox: styled checkbox */\nexport default class CheckBox extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.handleChange = this.handleChange.bind(this);\n }\n\n handleChange() {\n this.props.onChange(this.props.name, !this.props.checked);\n }\n\n render() {\n return (\n this.props.onChange ? (\n this.props.checked ?\n check_box :\n check_box_outline_blank\n ) : (\n this.props.checked ?\n check_box :\n check_box_outline_blank\n )\n );\n }\n}\n/* END CheckBox */\n","import React from 'react';\n\nimport Chip from './chip.jsx';\n\nimport { makeImageUrl } from '../lib/blob-helpers.js';\n\n/* BEGIN ChipInput: group membership widget */\nexport default class ChipInput extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = ChipInput.deriveStateFromProps(props);\n this.state.input = '';\n this.state.focused = false;\n\n this.handleTextInput = this.handleTextInput.bind(this);\n this.removeChipAt = this.removeChipAt.bind(this);\n this.handleChipCancel = this.handleChipCancel.bind(this);\n this.handleFocusGained = this.handleFocusGained.bind(this);\n this.handleFocusLost = this.handleFocusLost.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n }\n\n static deriveStateFromProps(props) {\n return {\n placeholder: props.chips ? '' : props.prompt,\n sortedChips: ChipInput.sortChips(props.chips, props.staticMembers),\n chipIndex: ChipInput.indexChips(props.chips)\n };\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (prevProps.chips != this.props.chips ||\n prevProps.staticMembers != this.props.staticMembers ||\n prevProps.prompt != this.props.prompt) {\n this.setState(ChipInput.deriveStateFromProps(this.props));\n }\n if (!prevState || this.props.chips.length > prevState.sortedChips.length) {\n this.setState({input: ''});\n }\n }\n\n // Map chip index to user name\n static indexChips(chips) {\n const index = {};\n let count = 0;\n chips.map((item) => {\n index[item.user] = count;\n count ++;\n });\n return index;\n }\n\n // Have non-removable chips appear before all other chips.\n static sortChips(chips, keep) {\n const required = [];\n const normal = [];\n chips.map((item) => {\n if (keep && keep.includes(item.user)) {\n required.push(item);\n } else {\n normal.push(item);\n }\n });\n return required.concat(normal);\n }\n\n handleTextInput(e) {\n this.setState({input: e.target.value});\n if (this.props.filterFunc) {\n this.props.filterFunc(e.target.value);\n }\n }\n\n removeChipAt(idx) {\n const removed = this.state.sortedChips[idx];\n this.props.onChipRemoved(removed.user, this.state.chipIndex[removed.user]);\n }\n\n handleChipCancel(item, idx) {\n this.removeChipAt(idx);\n }\n\n handleFocusGained() {\n this.setState({focused: true});\n }\n\n handleFocusLost() {\n this.setState({focused: false});\n if (this.props.onFocusLost) {\n this.props.onFocusLost(this.state.input);\n }\n }\n\n handleKeyDown(e) {\n if (e.key === 'Backspace') {\n if (this.state.input.length == 0 && this.state.sortedChips.length > 0) {\n const at = this.state.sortedChips.length - 1;\n if (this.state.sortedChips[at].user !== this.props.staticMembers) {\n this.removeChipAt(at);\n }\n }\n } else if (e.key === 'Enter') {\n if (this.props.onEnter) {\n this.props.onEnter(this.state.input);\n }\n } else if (e.key === 'Escape') {\n if (this.props.onCancel) {\n this.props.onCancel();\n }\n }\n }\n\n render() {\n const chips = [];\n let count = 0;\n const staticMembers = this.props.staticMembers || [];\n this.state.sortedChips.map((item) => {\n chips.push(\n
\n {contactNodes}\n
\n :\n null\n }\n
: null}\n \n {menu}\n
\n );\n }\n}\n\nexport default injectIntl(ContextMenu);\n","import React from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport SendMessage from '../widgets/send-message.jsx';\n\nimport { bytesToHumanSize } from '../lib/strformat.js';\n\n// Get material icon name from mime type.\nfunction iconFromMime(mime) {\n // If more icons become available in material icons, add them to this mime-to-icon mapping.\n const mimeToIcon = {default: 'insert_drive_file', image: 'image', text: 'description', video: 'theaters'};\n\n return mimeToIcon[mime] || mimeToIcon[(mime || '').split('/')[0]] || mimeToIcon['default'];\n}\n\nexport default class DocPreview extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.handleSendDoc = this.handleSendDoc.bind(this);\n }\n\n handleSendDoc(caption) {\n this.props.onClose();\n this.props.onSendMessage(this.props.content.file);\n }\n\n render() {\n if (!this.props.content) {\n return null;\n }\n return (\n \n
{e.target.onerror = null; e.target.src=\"/img/broken_image.png\"}} />;\n } else {\n avatar = null;\n }\n return avatar;\n }\n}\n","import React from 'react';\n\nexport default class LoadSpinner extends React.PureComponent {\n render() {\n return (this.props.show ?\n
\n \n );\n }\n\n return (\n {names[c]} \n {skip.indexOf(c) < 0 ?\n {this.props.compare ? \n : null}\n
: null}\n \n \n {this.props.compare ?\n
\n \n :\n null}\n \n {items}\n {this.props.modeTitle} \n {this.props.compareTitle} \n
\n
¯∖_(ツ)_/¯","full_name_prompt":"Vollständiger Name, z.B. Lisa Musterfrau","email_prompt":"E-Mail, z.B. jdoe@beispiel.de","button_sign_up":"Anmelden","label_your_name":"Ihr Name","label_user_id":"ID:","button_edit":"Bearbeiten","requested_permissions":"Angefordert","granted_permissions":"Erteilt","menu_item_edit_permissions":"Berechtigungen ändern","label_other_user":"Andere","action_clear_messages":"Nachrichten leeren","clear_messages_warning":"Sind Sie sicher, dass Sie diese Unterhaltung für alle leeren wollen? Das kann nicht rückgängig gemacht werden.","action_delete_messages":"Nachrichten für alle löschen","delete_messages_warning":"Sind Sie sicher, dass Sie diese Unterhaltung für alle löschen wollen? Das kann nicht rückgängig gemacht werden.","action_leave_chat":"Unterhaltung verlassen","leave_chat_warning":"Möchten Sie diese Unterhaltung wirklich verlassen?","action_block_contact":"Kontakt blockieren","block_contact_warning":"Möchten Sie diesen Kontakt wirklich blockieren?","action_report_chat":"Unterhaltung melden","report_chat_warning":"Möchten Sie diese Unterhaltung wirklich blockieren und melden?","title_info":"Info","label_topic_name":"Name","label_private":"Privater Kommentar","private_editing_placeholder":"Nur für Sie sichtbar","label_muting_topic":"Stumm geschaltet:","action_more":"Mehr","label_your_permissions":"Ihre Berechtigungen:","label_permissions":"Berechtigungen:","label_you":"Sie:","label_default_access":"Standard Zugriffsmodus:","label_group_members":"Gruppenmitglieder:","button_add_members":"Mitglieder hinzufügen","group_has_no_members":"Keine Mitglieder","login_prompt":"Anmelden","password_prompt":"Passwort","stay_logged_in":"Angemeldet bleiben","forgot_password_link":"Passwort vergessen?","button_sign_in":"Anmelden","label_client":"Client:","label_server":"Server:","online_now":"jetzt online","last_seen_timestamp":"Zuletzt gesehen","title_not_found":"Nicht gefunden","unnamed_topic":"Unbenannt","messages_not_readable":"Neue Nachrichten können nicht gelesen werden","peers_messaging_disabled":"Gruppennachrichten sind deaktiviert","enable_peers_messaging":"Aktivieren","search_for_contacts":"Nutzen Sie die Suche um Kontakte zu finden","search_no_results":"Die Suche hatte keine Ergebnisse","tabtitle_find_user":"Suchen","tabtitle_new_group":"Neue Gruppe","tabtitle_group_by_id":"nach ID","new_password_placeholder":"Geben Sie ein neues Passwort ein","label_reset_password":"Passwort per E-Mail wiederherstellen:","credential_email_prompt":"E-Mail Adresse für Registrierung","button_reset":"Zurücksetzen","button_send_request":"Anfrage senden","label_server_to_use":"Server verwenden:","label_wire_transport":"Übertragung per Kabel:","button_update":"Aktualisieren","sidepanel_title_login":"Anmelden","sidepanel_title_register":"Konto erstellen","sidepanel_title_settings":"Einstellungen","sidepanel_title_account_settings":"Konto-Einstellungen","sidepanel_title_acc_general":"Allgemein","sidepanel_title_acc_security":"Sicherheit","sidepanel_title_acc_notifications":"Benachrichtigungen","sidepanel_title_acc_support":"Unterstützung","sidepanel_title_newtpk":"Neue Unterhaltung starten","sidepanel_title_cred":"Anmeldeinformationen bestätigen","sidepanel_title_reset":"Passwort zurücksetzen","sidepanel_title_archive":"Archivierte Unterhaltungen","sidepanel_title_blocked":"Blockierte Unterhaltungen","reconnect_countdown":"Getrennt. Wiederverbinden in {seconds}…","reconnect_now":"Jetzt probieren","push_init_failed":"Initialisierung von Push-Benachrichtigungen fehlgeschlagen","invalid_security_token":"Ungültiger Sicherheitsschlüssel","no_connection":"Keine Verbindung","code_doesnot_match":"Code stimmt nicht überein","update_available":"Aktualisierung verfügbar.","reload_update":"Neu laden","phone_dative":"Telefon","email_dative":"E-Mail","enter_confirmation_code_prompt":"Geben Sie den Bestätigungscode ein, der per {method} geschickt wurde:","numeric_confirmation_code_prompt":"Nur zahlen","button_confirm":"Bestätigen","save_attachment":"Speichern","deleted_content":"Inhalt gelöscht","invalid_content":"ungültiger Inhalt","user_not_found":"Nicht gefunden","badge_you":"Sie","badge_owner":"Besitzer","menu_item_info":"Info","menu_item_clear_messages":"Nachrichten leeren","menu_item_clear_messages_for_all":"Für alle leeren","menu_item_delete":"Löschen","menu_item_delete_for_all":"Für alle löschen","menu_item_send_retry":"Wiederholen","menu_item_mute":"Unterhaltung stumm schalten","menu_item_unmute":"Stumm schalten beenden","menu_item_delete_topic":"Entfernen","topic_delete_warning":"Möchten Sie diese Unterhaltung wirklich löschen?","menu_item_unblock":"Blockierung aufheben","menu_item_block":"Blockieren","topic_block_warning":"Möchten Sie diese Unterhaltung wirklich blockieren?","menu_item_member_delete":"Entfernen","menu_item_archive_topic":"Archivieren","action_cancel":"Abbrechen","upload_finishing":"wird abgeschlossen...","no_contacts":"Sie haben keine Kontakte :-(","contacts_not_found_short":"Keine Kontakte für \'\'{query}\'\'","title_group_members":"Gruppenmitglieder","title_all_contacts":"Alle Kontakte","button_ok":"OK","button_cancel":"Abbrechen","more_online_members":"+{overflow} mehr","download_action":"herunterladen","label_file_name":"Dateiname:","label_content_type":"Inhaltsart:","label_size":"Größe:","chat_invitation":"Sie sind eingeladen, an einem neuen Chat teilzunehmen. Was möchten Sie tun?","chat_invitation_accept":"Akzeptieren","chat_invitation_ignore":"Ignorieren","chat_invitation_block":"Blockieren","error_invalid_id":"ungültige ID","group_user_id_prompt":"Gruppe oder Benutzer ID","button_subscribe":"Abbonieren","topic_name_editing_placeholder":"Freiform Name der Gruppe","button_create":"Erstellen","permission_join":"Beitreten ({val})","permission_read":"Lesen ({val})","permission_write":"Schreiben ({val})","permission_pres":"Benachrichtigt werden ({val})","permission_admin":"Bestätigen ({val})","permission_share":"Teilen ({val})","permission_delete":"Entfernen ({val})","permission_owner":"Besitzer ({val})","title_permissions":"Berechtigungen","message_sending":"wird gesendet...","message_sending_failed":"fehlgeschlagen","search_placeholder":"Liste: email:lisa@beispiel.de, tel:17025550003...","messaging_disabled_prompt":"Nachrichtenübermittlung deaktiviert","new_message_prompt":"Neue Nachricht","image_caption_prompt":"Bildunterschrift","file_attachment_too_large":"Die Dateigröße {size} überschreitet das Limit von {limit}.","cannot_initiate_file_upload":"Datei kann nicht hochgeladen werden.","tags_not_found":"Keine Schlagworte definiert. Erstellen Sie welche.","tags_editor_no_tags":"Schlagworte hinzufügen","title_manage_tags":"Verwalten","channel_prompt":"Dies ist ein Sender","channel":"Sender"},"en":{"validate_credential_action":"confirm","title_tag_manager":"Tags (user discovery)","label_user_contacts":"Contacts:","button_add_another":"Add another","label_message_sound":"Message sound:","label_push_notifications":"Notification alerts:","label_push_notifications_disabled":"Notification alerts (requires HTTPS):","label_incognito_mode":"Incognito mode:","delete_account":"Delete account","delete_account_arning":"Are you sure you want to delete your account? It cannot be undone.","label_password":"Password","password_unchanged_prompt":"Unchanged","button_logout":"Logout","button_delete_account":"Delete account","label_default_access_mode":"Default access mode:","blocked_contacts_link":"Blocked contacts ({count})","link_contact_us":"Contact Us","link_terms_of_service":"Terms of Service","link_privacy_policy":"Privacy Policy","label_sdk":"SDK:","label_server_address":"Server address:","archived_contacts":"Archived contacts ({count})","contacts_not_found":"You have no chats
¯∖_(ツ)_/¯","full_name_prompt":"Full name, e.g. John Doe","email_prompt":"Email, e.g. jdoe@example.com","button_sign_up":"Sign up","label_your_name":"Your name","label_user_id":"ID:","button_edit":"Edit","requested_permissions":"Requested","granted_permissions":"Granted","menu_item_edit_permissions":"Edit permissions","label_other_user":"Other","action_clear_messages":"Clear Messages","clear_messages_warning":"Are you sure you want to clear all messages? It cannot be undone.","action_delete_messages":"Clear Messages for All","delete_messages_warning":"Are you sure you want to delete all messages for everyone? It cannot be undone.","action_leave_chat":"Leave Conversation","leave_chat_warning":"Are you sure you want to leave this conversation?","action_block_contact":"Block Contact","block_contact_warning":"Are you sure you want to block this contact?","action_report_chat":"Report Conversation","report_chat_warning":"Are you sure you want to block and report this conversation?","title_info":"Info","label_topic_name":"Name","label_private":"Private comment","private_editing_placeholder":"Visible to you only","label_muting_topic":"Muted:","action_more":"More","label_your_permissions":"Your permissions:","label_permissions":"Permissions:","label_you":"You:","label_default_access":"Default access mode:","label_group_members":"Group members:","button_add_members":"Add members","group_has_no_members":"No members","login_prompt":"Login","password_prompt":"Password","stay_logged_in":"Stay logged in","forgot_password_link":"Forgot password?","button_sign_in":"Sign in","label_client":"Client:","label_server":"Server:","online_now":"online now","last_seen_timestamp":"Last seen","title_not_found":"Not found","channel":"channel","unnamed_topic":"Unnamed","messages_not_readable":"no access to messages","peers_messaging_disabled":"Peer\'s messaging is disabled.","enable_peers_messaging":"Enable","search_for_contacts":"Use search to find contacts","search_no_results":"Search returned no results","tabtitle_find_user":"find","tabtitle_new_group":"new group","tabtitle_group_by_id":"by id","new_password_placeholder":"Enter new password","label_reset_password":"Send a password reset email:","credential_email_prompt":"Your registration email","button_reset":"Reset","button_send_request":"Send request","label_server_to_use":"Server to use:","label_wire_transport":"Wire transport:","button_update":"Update","sidepanel_title_login":"Sign In","sidepanel_title_register":"Create Account","sidepanel_title_settings":"Settings","sidepanel_title_account_settings":"Account Settings","sidepanel_title_acc_general":"General","sidepanel_title_acc_security":"Security","sidepanel_title_acc_notifications":"Notifications","sidepanel_title_acc_support":"Support","sidepanel_title_newtpk":"Start New Chat","sidepanel_title_cred":"Confirm Credentials","sidepanel_title_reset":"Reset Password","sidepanel_title_archive":"Archived Chats","sidepanel_title_blocked":"Blocked Chats","reconnect_countdown":"Disconnected. Reconnecting in {seconds}…","reconnect_now":"Try now","push_init_failed":"Failed to initialize push notifications","invalid_security_token":"Invalid security token","no_connection":"No connection","code_doesnot_match":"Code does not match","update_available":"Update available.","reload_update":"Reload","phone_dative":"phone","email_dative":"email","enter_confirmation_code_prompt":"Enter confirmation code sent to you by {method}:","numeric_confirmation_code_prompt":"Numbers only","button_confirm":"Confirm","save_attachment":"save","deleted_content":"content deleted","invalid_content":"invalid content","user_not_found":"Not found","badge_you":"you","badge_owner":"owner","menu_item_info":"Info","menu_item_clear_messages":"Clear messages","menu_item_clear_messages_for_all":"Clear for All","menu_item_delete":"Delete","menu_item_delete_for_all":"Delete for All","menu_item_send_retry":"Retry","menu_item_mute":"Mute","menu_item_unmute":"Unmute","menu_item_delete_topic":"Delete","topic_delete_warning":"Are you sure you want to delete this conversation?","menu_item_unblock":"Unblock","menu_item_block":"Block","topic_block_warning":"Are you sure you want to block this conversation?","menu_item_member_delete":"Remove","menu_item_archive_topic":"Archive","action_cancel":"cancel","upload_finishing":"finishing...","no_contacts":"You have no contacts :-(","contacts_not_found_short":"No contacts match \'\'{query}\'\'","title_group_members":"Group Members","title_all_contacts":"All Contacts","button_ok":"OK","button_cancel":"Cancel","more_online_members":"+{overflow} more","download_action":"download","label_file_name":"File name:","label_content_type":"Content type:","label_size":"Size:","chat_invitation":"You are invited to start a new chat. What would you like to do?","chat_invitation_accept":"Accept","chat_invitation_ignore":"Ignore","chat_invitation_block":"Block","error_invalid_id":"Invalid ID","group_user_id_prompt":"Group or User ID","button_subscribe":"Subscribe","topic_name_editing_placeholder":"Freeform name of the group","channel_prompt":"This is a channel","button_create":"Create","permission_join":"Join ({val})","permission_read":"Read ({val})","permission_write":"Write ({val})","permission_pres":"Get notified ({val})","permission_admin":"Approve ({val})","permission_share":"Share ({val})","permission_delete":"Delete ({val})","permission_owner":"Owner ({val})","title_permissions":"Permissions","message_sending":"sending...","message_sending_failed":"failed","search_placeholder":"List like email:alice@example.com, tel:17025550003...","messaging_disabled_prompt":"Messaging disabled","new_message_prompt":"New message","image_caption_prompt":"Image caption","file_attachment_too_large":"The file size {size} exceeds the {limit} limit.","cannot_initiate_file_upload":"Cannot initiate file upload.","tags_not_found":"No tags defined. Add some.","tags_editor_no_tags":"Add some tags","title_manage_tags":"Manage"},"es":{"validate_credential_action":"confirmar","title_tag_manager":"Etiquetas (descubrimiento de usuarios)","label_user_contacts":"Contactos:","button_add_another":"Añadir contacto","label_message_sound":"Sonido de mensaje:","label_push_notifications":"Alertas de notificaciones:","label_push_notifications_disabled":"Alertas de notificaciones (requiere HTTPS):","label_incognito_mode":"Modo incógnito:","delete_account":"Eliminar cuenta","delete_account_arning":"¿Estás seguro de que deseas eliminar permanentemente tu cuenta? Esta acción es irreversible.","label_password":"Contraseña","password_unchanged_prompt":"Sin cambios","button_logout":"Cerrar sesión","button_delete_account":"Eliminar cuenta","label_default_access_mode":"Modo de acceso predeterminado:","blocked_contacts_link":"Contactos bloqueados ({count})","link_contact_us":"Contáctanos","link_terms_of_service":"Términos de uso","link_privacy_policy":"Política de privacidad","label_sdk":"SDK:","label_server_address":"Dirección del servidor:","archived_contacts":"Contactos archivados ({count})","contacts_not_found":"No tienes chats
¯∖_(ツ)_/¯","full_name_prompt":"Nombre completo, p.ej. Juan González Hernández","email_prompt":"Correo electrónico, p.ej. juan@example.com","button_sign_up":"Regístrate","label_your_name":"Tu nombre","label_user_id":"ID:","button_edit":"Editar","requested_permissions":"Solicitados","granted_permissions":"Otorgados","menu_item_edit_permissions":"Editar permisos","label_other_user":"Otros","action_clear_messages":"Borrar mensajes","clear_messages_warning":"¿Estás seguro de que quieres eliminar todos los mensajes? Esta acción es irreversible.","action_delete_messages":"Borrar mensajes para todos","delete_messages_warning":"¿Estás seguro de que quieres eliminar todos los mensajes para todos? Esta acción es irreversible.","action_leave_chat":"Dejar conversación","leave_chat_warning":"¿Estás seguro de que quieres dejar esta conversación?","action_block_contact":"Bloquear contacto","block_contact_warning":"¿Estás seguro de que quieres bloquear a este contacto?","action_report_chat":"Reportar conversación","report_chat_warning":"¿Estás seguro de que quieres bloquear y reportar a esta conversación?","title_info":"Información","label_topic_name":"Nombre del tema","label_private":"Comentario privado","private_editing_placeholder":"Sólo visible para tí","label_muting_topic":"Silenciado:","action_more":"Más","label_your_permissions":"Tus permisoss:","label_permissions":"Permisos:","label_you":"Tú:","label_default_access":"Modo de acceso predeterminado:","label_group_members":"Miembros del grupo:","button_add_members":"Añadir miembros","group_has_no_members":"No hay miembros","login_prompt":"Nombre de usuario","password_prompt":"Contraseña","stay_logged_in":"Permanecer conectado","forgot_password_link":"¿Olvidaste tu contraseña?","button_sign_in":"Entrar","label_client":"Cliente:","label_server":"Servidor:","online_now":"en línea","last_seen_timestamp":"Últ. vez","title_not_found":"No encontrado","unnamed_topic":"Sin nombre","messages_not_readable":"sin acceso a mensajes","peers_messaging_disabled":"La mensajería Peer está deshabilitada.","enable_peers_messaging":"Habilitar","search_for_contacts":"Usa la búsqueda para encontrar contactos","search_no_results":"La búsqueda no arrojó resultados","tabtitle_find_user":"encontrar","tabtitle_new_group":"nuevo grupo","tabtitle_group_by_id":"por ID","new_password_placeholder":"Introduzca una nueva contraseña","label_reset_password":"Enviar un correo electrónico de restablecimiento de contraseña:","credential_email_prompt":"Tu correo electrónico de registro","button_reset":"Restablecer","button_send_request":"Enviar petición","label_server_to_use":"Servidor para usar:","label_wire_transport":"Transporte de alambre:","button_update":"Actualizar","sidepanel_title_login":"Iniciar sesión","sidepanel_title_register":"Crear cuenta","sidepanel_title_settings":"Ajustes","sidepanel_title_account_settings":"Ajustes de la cuenta","sidepanel_title_acc_general":"General","sidepanel_title_acc_security":"Seguridad","sidepanel_title_acc_notifications":"Notificaciones","sidepanel_title_acc_support":"Soporte","sidepanel_title_newtpk":"Iniciar un nuevo chat","sidepanel_title_cred":"Confirmar credenciales","sidepanel_title_reset":"Restablecer contraseña","sidepanel_title_archive":"Chats archivados","sidepanel_title_blocked":"Chats bloqueados","update_available":"Actualización disponible.","reload_update":"Recargar","reconnect_countdown":"Desconectado. Reconectando en {seconds}…","reconnect_now":"Reintentar","push_init_failed":"Error al inicializar las notificaciones push","invalid_security_token":"Token de seguridad inválido","no_connection":"Sin conexión","code_doesnot_match":"El código no coincide","phone_dative":"teléfono","email_dative":"correo electrónico","enter_confirmation_code_prompt":"Intruduzca el código de confirmación enviado a tu {method}:","numeric_confirmation_code_prompt":"Sólo números","button_confirm":"Confirmar","save_attachment":"guardar","deleted_content":"este mensaje fue eliminado","invalid_content":"contenido inválido","user_not_found":"Usuario no encontrado","badge_you":"tú","badge_owner":"propietario","menu_item_info":"Información","menu_item_clear_messages":"Borrar mensajes","menu_item_clear_messages_for_all":"Borrar para todos","menu_item_delete":"Eliminar","menu_item_delete_for_all":"Eliminar para todos","menu_item_send_retry":"Inténtalo de nuevo","menu_item_mute":"Silenciar","menu_item_unmute":"Anular el silencio","menu_item_delete_topic":"Eliminar","topic_delete_warning":"¿Estás seguro de que quieres eliminar esta conversación?","menu_item_unblock":"Desbloquear","menu_item_block":"Bloquear","topic_block_warning":"¿Estás seguro de que quieres bloquear esta conversación","menu_item_member_delete":"Eliminar","menu_item_archive_topic":"Archivar","action_cancel":"cancelar","upload_finishing":"terminando...","no_contacts":"No tienes contactos :-(","contacts_not_found_short":"Ningún contacto coincide con \'\'{query}\'\'","title_group_members":"Miembros del grupo","title_all_contacts":"Todos los contactos","button_ok":"OK","button_cancel":"Cancelar","more_online_members":"+{overflow} más","download_action":"descargar","label_file_name":"Nombre del archivo:","label_content_type":"Tipo de contenido:","label_size":"Tamaño:","chat_invitation":"Estás invitado a participar en un nuevo chat. ¿Qué te gustaría hacer?","chat_invitation_accept":"Aceptar","chat_invitation_ignore":"Ignorar","chat_invitation_block":"Bloquear","error_invalid_id":"ID inválido","group_user_id_prompt":"ID del grupo o usuario","button_subscribe":"Suscribirse","topic_name_editing_placeholder":"Nombre del grupo","button_create":"Crear","permission_join":"Unirse ({val})","permission_read":"Leer ({val})","permission_write":"Escribir ({val})","permission_pres":"Ser notificado ({val})","permission_admin":"Approbar ({val})","permission_share":"Compartir ({val})","permission_delete":"Eliminar ({val})","permission_owner":"Propietario ({val})","title_permissions":"Permisos","message_sending":"enviando...","message_sending_failed":"no se pudo enviar el mensaje","search_placeholder":"Ej. email:alice@example.com, tel:17025550003...","messaging_disabled_prompt":"El envío de mensajes está deshabilitado","new_message_prompt":"Nuevo mensaje","image_caption_prompt":"Añade un comentario","file_attachment_too_large":"El tamaño del archivo {size} excede el límite de {limit}.","cannot_initiate_file_upload":"No se pudo iniciar la carga del archivo.","tags_not_found":"No hay etiquetas definidas. Añade unas.","tags_editor_no_tags":"Añadir etiquetas","title_manage_tags":"Gestionar","channel_prompt":"Este es un canal","channel":"canal"},"ko":{"validate_credential_action":"확인","title_tag_manager":"태그(사용자검색)","label_user_contacts":"연락처: ","button_add_another":"다른항목추가","label_message_sound":"메시지소리: ","label_push_notifications":"통지경보: ","label_push_notifications_disabled":"통지경보(HTTPS필요): ","label_incognito_mode":"시크릿모드: ","delete_account":"계정삭제","delete_account_arning":"계정을삭제하시겠습니까?실행취소할수없습니다.","label_password":"비밀번호","password_unchanged_prompt":"변경되지않음","button_logout":"로그아웃","button_delete_account":"계정삭제","label_default_access_mode":"기본액세스모드: ","blocked_contacts_link":"차단된연락처({수})","link_contact_us":"문의처","link_terms_of_service":"서비스약관","link_privacy_policy":"개인정보보호정책","label_sdk":"SDK:","label_server_address":"서버주소: ","archived_contacts":"보관된연락처({수})","contacts_not_found":"채팅이없습니다
¯∖_(ツ)_/¯","full_name_prompt":"전체이름(예:홍길동)","email_prompt":"이메일(예:hong@example.com)","button_sign_up":"가입","label_your_name":"이름","label_user_id":"ID:","button_edit":"편집","requested_permissions":"요청","menu_item_edit_permissions":"편집권한","label_other_user":"기타","action_clear_messages":"메시지지우기","clear_messages_warning":"모든메시지를지우시겠습니까?실행취소할수없습니다.","action_delete_messages":"모든메시지지우기","delete_messages_warning":"모든사람의모든메시지를삭제하시겠습니까?실행취소할수없습니다.","action_leave_chat":"대화나누기","leave_chat_warning":"이대화를나가시겠습니까?","action_block_contact":"연락차단","block_contact_warning":"이연락처를차단하시겠습니까?","action_report_chat":"대화기록","report_chat_warning":"이대화를차단하고기록하시겠습니까?","title_info":"정보","label_topic_name":"이름","label_private":"개인코멘트","private_editing_placeholder":"나만볼수있습니다","label_muting_topic":"음소거: ","action_more":"더보기","label_your_permissions":"권한: ","label_permissions":"권한: ","label_you":"당신: ","label_default_access":"기본액세스모드: ","label_group_members":"그룹회원: ","button_add_members":"회원추가","group_has_no_members":"회원없음","login_prompt":"로그인","password_prompt":"비밀번호","stay_logged_in":"로그인상태유지","forgot_password_link":"비밀번호를잊으셨습니까?","button_sign_in":"로그인","label_client":"클라이언트: ","label_server":"서버: ","online_now":"현재접속중","last_seen_timestamp":"마지막으로본","title_not_found":"찾을수없음","unnamed_topic":"이름없는","peers_messaging_disabled":"동료의메시지가비활성화되었습니다.","enable_peers_messaging":"활성화","search_for_contacts":"검색을사용하여연락처찾기","search_no_results":"검색결과가없습니다","tabtitle_find_user":"찾기","tabtitle_new_group":"새그룹","tabtitle_group_by_id":"id로","new_password_placeholder":"새비밀번호입력","label_reset_password":"비밀번호재설정이메일보내기: ","credential_email_prompt":"등록이메일","button_reset":"재설정","button_send_request":"요청보내기","label_server_to_use":"사용할서버:","label_wire_transport":"와이어수송:","button_update":"업데이트","sidepanel_title_login":"로그인","sidepanel_title_register":"계정만들기","sidepanel_title_settings":"설정","sidepanel_title_account_settings":"계정설정","sidepanel_title_acc_general":"일반","sidepanel_title_acc_security":"보안","sidepanel_title_acc_notifications":"알림","sidepanel_title_acc_support":"지원","sidepanel_title_newtpk":"새채팅시작","sidepanel_title_cred":"자격증명확인","sidepanel_title_reset":"비밀번호재설정","sidepanel_title_archive":"보관된채팅","sidepanel_title_blocked":"차단된채팅","update_available":"업데이트가능.","reload_update":"재로드","reconnect_countdown":"연결이끊어졌습니다.다시연결하는중{초}…","reconnect_now":"지금시도","push_init_failed":"푸시알림을초기화하지못했습니다","invalid_security_token":"유효하지않은보안토큰","no_connection":"연결없음","code_doesnot_match":"코드가일치하지않습니다","phone_dative":"전화","email_dative":"이메일","enter_confirmation_code_prompt":"{방법}으로보낸확인코드를입력하십시오:","numeric_confirmation_code_prompt":"숫자만","button_confirm":"확인","save_attachment":"저장","invalid_content":"잘못된내용","user_not_found":"찾을수없음","badge_you":"당신","badge_owner":"소유자","menu_item_info":"정보","menu_item_clear_messages":"메시지지우기","menu_item_clear_messages_for_all":"모두지우기","menu_item_delete":"삭제","menu_item_delete_for_all":"모두삭제","menu_item_send_retry":"다시시도","menu_item_mute":"음소거","menu_item_unmute":"음소거해제","menu_item_delete_topic":"삭제","topic_delete_warning":"이대화를삭제하시겠습니까?","menu_item_unblock":"차단해제","menu_item_block":"차단","topic_block_warning":"이대화를차단하시겠습니까?","menu_item_member_delete":"제거","menu_item_archive_topic":"보관","action_cancel":"취소","upload_finishing":"마무리...","no_contacts":"연락처가없습니다 (._.)","contacts_not_found_short":"\'{문의}\'와일치하는연락처가없습니다.","title_group_members":"그룹구성원","title_all_contacts":"모든연락처","button_ok":"OK","button_cancel":"취소","more_online_members":"+{넘침}더보기","download_action":"다운로드","label_file_name":"파일이름: ","label_content_type":"컨텐츠유형: ","label_size":"크기: ","chat_invitation":"새로운대화를시작하도록초대되었습니다.무엇을하시겠습니까?","chat_invitation_accept":"수락","chat_invitation_ignore":"무시","chat_invitation_block":"차단","error_invalid_id":"잘못된ID","group_user_id_prompt":"그룹또는사용자ID","button_subscribe":"구독","topic_name_editing_placeholder":"그룹의자유형이름","button_create":"작성","permission_join":"참여({val})","permission_read":"읽기({val})","permission_write":"쓰기({val})","permission_pres":"알림받기({val})","permission_admin":"승인({val})","permission_share":"공유({val})","permission_delete":"삭제({val})","permission_owner":"소유자({val})","title_permissions":"권한","message_sending":"보내기...","message_sending_failed":"실패","search_placeholder":"email:alice@example.com,tel:17025550003...와같은목록","messaging_disabled_prompt":"메시지비활성화","new_message_prompt":"새메시지","image_caption_prompt":"이미지설명","file_attachment_too_large":"파일크기{크기}이(가){제한}제한을초과합니다.","cannot_initiate_file_upload":"파일업로드를시작할수없습니다.","tags_not_found":"태그가정의되지않았습니다.일부를추가하십시오.","tags_editor_no_tags":"일부태그추가","title_manage_tags":"관리","granted_permissions":"승낙하다","messages_not_readable":"메시지에 액세스 할 수 없습니다","deleted_content":"내용이 삭제되었습니다","channel_prompt":"이 채널입니다","channel":"채널"},"ro":{"validate_credential_action":"confirmă","title_tag_manager":"Tag-uri (user discovery)","label_user_contacts":"Contacte:","button_add_another":"Adaugă","label_message_sound":"Sunet de mesaj:","label_push_notifications":"Alerte de notificare:","label_push_notifications_disabled":"Alerte de notificare (necesită HTTPS):","label_incognito_mode":"Mod incognito:","delete_account":"Șterge contul","delete_account_arning":"Ești sigur că dorești să ștergi contul? Acesta nu va putea fi recuperat.","label_password":"Parola","password_unchanged_prompt":"Neschimbată","button_logout":"Deconectare","button_delete_account":"Șterge cont","label_default_access_mode":"Default access mode:","blocked_contacts_link":"Contact blocate ({count})","link_contact_us":"Contactează-ne","link_terms_of_service":"Termenii Serviciului","link_privacy_policy":"Politica de Confidențialitate","label_sdk":"SDK:","label_server_address":"Adresa serverului:","archived_contacts":"Contacte arhivate ({count})","contacts_not_found":"Nu ai contacte salvate
¯∖_(ツ)_/¯","full_name_prompt":"Numele tău","email_prompt":"Adresa de e-mail","button_sign_up":"Creează cont","label_your_name":"Numele tău","label_user_id":"ID:","button_edit":"Editează","requested_permissions":"Necesare","granted_permissions":"Oferite","menu_item_edit_permissions":"Editează permisiuni","label_other_user":"Altele","action_clear_messages":"Șterge mesajele","clear_messages_warning":"Ești sigur că dorești să ștergi mesajele? Acestea nu pot fi recuperate.","action_delete_messages":"Șterge toate mesajele","delete_messages_warning":"Ești sigur că dorești să șterge mesajele din toate conversațiile? Acestea nu pot fi recuperate.","action_leave_chat":"Ieși din conversație","leave_chat_warning":"Ești sigur că dorești să ieși din conersație?","action_block_contact":"Blochează contact","block_contact_warning":"Ești sigur că dorești să blochezi acest contact?","action_report_chat":"Raportează conversația","report_chat_warning":"Ești sigur că dorești să blochezi și să raportezi această conversație?","title_info":"Info","label_topic_name":"Nume","label_private":"Comentariu privat","private_editing_placeholder":"Vizibil doar ție","label_muting_topic":"Mod silențios (muted):","action_more":"Mai multe","label_your_permissions":"Permisiuniile tale:","label_permissions":"Permisiuni:","label_you":"Tu:","label_default_access":"Modul default:","label_group_members":"Membrii grupului:","button_add_members":"Adaugă persoane","group_has_no_members":"În acest grup nu se află persoane","login_prompt":"Conectează-te","password_prompt":"Parola","stay_logged_in":"Rămâi conectat","forgot_password_link":"Ți-ai uitat parola?","button_sign_in":"Conectează-te","label_client":"Client:","label_server":"Server:","online_now":"online acum","last_seen_timestamp":"Văzut ultima dată","title_not_found":"Nu a fost găsit","channel":"canal","unnamed_topic":"Nedenumit","messages_not_readable":"Mesajele nu pot fi citite","peers_messaging_disabled":"Mesageria de tip Peer este dezactivată.","enable_peers_messaging":"Activează","search_for_contacts":"Caută în contacte","search_no_results":"Nu s-au găsit rezultate","tabtitle_find_user":"caută","tabtitle_new_group":"grup nou","tabtitle_group_by_id":"după id","new_password_placeholder":"Introdu parolă","label_reset_password":"Resetează parola:","credential_email_prompt":"Adresa de e-mail","button_reset":"Resetează","button_send_request":"Trimite cerere","label_server_to_use":"Server de utilizat:","label_wire_transport":"Transportul legat:","button_update":"Actualizează","sidepanel_title_login":"Conectează-te","sidepanel_title_register":"Creează Cont","sidepanel_title_settings":"Setări","sidepanel_title_account_settings":"Setările Contului","sidepanel_title_acc_general":"Generale","sidepanel_title_acc_security":"Securitate","sidepanel_title_acc_notifications":"Notificări","sidepanel_title_acc_support":"Ajutor","sidepanel_title_newtpk":"Creeză un nou Chat","sidepanel_title_cred":"Confirmă credențiale","sidepanel_title_reset":"Resetează Parola","sidepanel_title_archive":"Conversații Arhivate","sidepanel_title_blocked":"Conversații Blocate","reconnect_countdown":"Deconectat. Se încearcă conectarea în {seconds}…","reconnect_now":"Încearcă din nou","push_init_failed":"Nu s-a reușit inițializarea tip push notifications","invalid_security_token":"Codul de securitate este invalid","no_connection":"Nu există conexiune","code_doesnot_match":"Codul furnizat nu este valid","update_available":"Actualizare disponibilă.","reload_update":"Reîncarcă","phone_dative":"telefon","email_dative":"email","enter_confirmation_code_prompt":"Introu codul de confirmare trimis pe {method}:","numeric_confirmation_code_prompt":"Doar cifre","button_confirm":"Confirmă","save_attachment":"salvează","deleted_content":"conținut șters","invalid_content":"conținut invalid","user_not_found":"Utilizatorul nu a fost găsit","badge_you":"tu","badge_owner":"owner","menu_item_info":"Info","menu_item_clear_messages":"Șterge mesajele","menu_item_clear_messages_for_all":"Ștergele pe toate","menu_item_delete":"Șterge","menu_item_delete_for_all":"Ștergele pe toate","menu_item_send_retry":"Reîncearcă","menu_item_mute":"Mute","menu_item_unmute":"Unmute","menu_item_delete_topic":"Șterge","topic_delete_warning":"Ești sigur că dorești să șterge această conversație?","menu_item_unblock":"Deblochează","menu_item_block":"Blochează","topic_block_warning":"Ești sigur că dorești să blochezi această conversație?","menu_item_member_delete":"Șterge persoană","menu_item_archive_topic":"Arhivează","action_cancel":"anulează","upload_finishing":"se încarcă...","no_contacts":"Nu ai contacte adăugate :-(","contacts_not_found_short":"Niciun contact găsit după criteriile \'\'{query}\'\'","title_group_members":"Persoanele din grup","title_all_contacts":"Toate Contactele","button_ok":"OK","button_cancel":"Anulează","more_online_members":"+{overflow} mai mult","download_action":"download","label_file_name":"Nume fișier:","label_content_type":"Tip conținut:","label_size":"Size:","chat_invitation":"Ai primit invitație într-o conversație. Accepți?","chat_invitation_accept":"Da, accept","chat_invitation_ignore":"Ignoră","chat_invitation_block":"Blochează","error_invalid_id":"ID Invalid","group_user_id_prompt":"Grup sau user ID","button_subscribe":"Subscribe","topic_name_editing_placeholder":"Numele grupului","channel_prompt":"Acesta este un canal","button_create":"Creează","permission_join":"Participare ({val})","permission_read":"Citire ({val})","permission_write":"Scriere ({val})","permission_pres":"Notificare ({val})","permission_admin":"Aprobare ({val})","permission_share":"Distribuire ({val})","permission_delete":"Ștergere ({val})","permission_owner":"Deținător ({val})","title_permissions":"Permisiuni","message_sending":"se trimite...","message_sending_failed":"eroare","search_placeholder":"Caută după e-mail sau număr telefon...","messaging_disabled_prompt":"Mesageria este dezactivată","new_message_prompt":"Mesaj nou","image_caption_prompt":"Titlul imaginii","file_attachment_too_large":"Dimensiunea fișiterului {size} depășește limita de {limit}.","cannot_initiate_file_upload":"Nu se poate face încărcarea.","tags_not_found":"Niciun tag definit. Adaugă.","tags_editor_no_tags":"Adaugă tag-uri","title_manage_tags":"Administrează"},"ru":{"contacts_not_found":"Чатов нет
¯∖_(ツ)_/¯","full_name_prompt":"Полное имя, напр. Иван Петров","email_prompt":"Email, напр. ivan@example.com","button_sign_up":"Создать аккаунт","label_your_name":"Ваше имя","label_password":"Пароль","password_unchanged_prompt":"Не изменен","label_user_id":"ID:","label_default_access_mode":"Доступ по умолчанию:","label_message_sound":"Звук нового сообщения:","label_push_notifications":"Уведомления:","label_push_notifications_disabled":"Уведомления (требуют HTTPS):","title_tag_manager":"Теги для поиска","button_logout":"Выйти","login_prompt":"Логин","password_prompt":"Пароль","stay_logged_in":"Запомнить","forgot_password_link":"Напомнить пароль","button_sign_in":"Войти","label_client":"Клиент:","label_server":"Сервер:","online_now":"онлайн","last_seen_timestamp":"Был активен","title_not_found":"Не найден","unnamed_topic":"Без названия","messages_not_readable":"нет доступа к сообщениям","tabtitle_find_user":"найти","tabtitle_new_group":"создать","tabtitle_group_by_id":"по id","label_server_to_use":"Использовать сервер:","label_wire_transport":"Соединение:","button_update":"Применить","sidepanel_title_login":"Авторизация","sidepanel_title_register":"Зарегистрироваться","sidepanel_title_settings":"Настройки","sidepanel_title_account_settings":"Настройки аккаунта","sidepanel_title_newtpk":"Новый чат","sidepanel_title_cred":"Подтвердить","sidepanel_title_reset":"Сменить пароль","tags_not_found":"Тегов нет. Добавьте","tags_editor_no_tags":"Добавьте теги","title_manage_tags":"Редактировать","message_sending":"в пути...","message_sending_failed":"ошибка","search_placeholder":"Список, напр. email:alice@example.com, tel:+17025550003...","messaging_disabled_prompt":"Отправка недоступна","new_message_prompt":"Новое сообщение","file_attachment_too_large":"Размер файла {size} превышает {limit} лимит.","cannot_initiate_file_upload":"Ошибка загрузки файла.","search_for_contacts":"Поиск контактов","enter_confirmation_code_prompt":"Код подтверждения, полученный по {method}:","numeric_confirmation_code_prompt":"Только цифры","button_confirm":"Подтвердить","button_ok":"OK","button_cancel":"Отменить","invalid_content":"сообщение не читается","label_file_name":"Имя файла:","label_content_type":"Тип:","label_size":"Размер:","phone_dative":"телефону","email_dative":"емейлу","title_group_members":"Участники","download_action":"скачать","permission_join":"Подписываться ({val})","permission_read":"Читать ({val})","permission_write":"Писать ({val})","permission_pres":"Уведомлять ({val})","permission_admin":"Подтверждать ({val})","permission_share":"Приглашать ({val})","permission_delete":"Удалять ({val})","permission_owner":"Владелец ({val})","title_permissions":"Права доступа","requested_permissions":"Требуются","granted_permissions":"Получены","menu_item_edit_permissions":"Права доступа","label_other_user":"Второй","label_topic_name":"Название","label_private":"Комментарий","private_editing_placeholder":"Виден только вам","label_muting_topic":"Без уведомлений","action_more":"Ещё","label_your_permissions":"Ваши права доступа:","label_permissions":"Права доступа:","label_you":"Вы:","label_default_access":"Права по умолчанию:","label_group_members":"Участники чата:","button_add_members":"Добавить","group_has_no_members":"Нет участников","action_leave_chat":"Уйти из чата","menu_item_info":"Информация","menu_item_clear_messages":"Удалить сообщения","menu_item_clear_messages_for_all":"Удалить для всех","menu_item_delete":"Удалить","menu_item_delete_for_all":"Удалить для всех","menu_item_send_retry":"Отправить заново","menu_item_mute":"Не уведомлять","menu_item_unmute":"Уведомлять","menu_item_delete_topic":"Удалить чат","menu_item_unblock":"Разблокировать","menu_item_block":"Заблокировать","menu_item_member_delete":"Отписать","title_info":"Подробности","new_password_placeholder":"Введите новый пароль","label_reset_password":"Отправить емейл для смены пароля:","credential_email_prompt":"Регистрационный емейл","button_reset":"Изменить","button_send_request":"Отправить","action_cancel":"отменить","upload_finishing":"завершение...","no_contacts":"Ничего нет :-(","contacts_not_found_short":"Нет контактов для запроса \'\'{query}\'\'","title_all_contacts":"Все контакты","error_invalid_id":"Неверный ID","group_user_id_prompt":"ID чата или пользователя","button_subscribe":"Подписаться","topic_name_editing_placeholder":"Название чата","button_create":"Создать","badge_you":"вы","badge_owner":"влад.","update_available":"Есть новая версия приложения.","reload_update":"Обновить","user_not_found":"Не найден","reconnect_countdown":"Нет связи. Подключение через {seconds}…","reconnect_now":"Подключить сейчас.","save_attachment":"сохранить","menu_item_archive_topic":"В архив","archived_contacts":"Чаты в архиве ({count})","sidepanel_title_archive":"Архив чатов","chat_invitation":"Вас пригласили начать новый чат. Как вы хотите поступить?","chat_invitation_accept":"Принять","chat_invitation_ignore":"Игнорировать","chat_invitation_block":"Заблокировать","peers_messaging_disabled":"Чат заблокирован у корреспондента.","enable_peers_messaging":"Разблокировать.","more_online_members":"+еще {overflow}","label_user_contacts":"Конакты:","validate_credential_action":"подтвердить","link_contact_us":"Связаться с нами","link_terms_of_service":"Условия сервиса","link_privacy_policy":"Политика конфиденциальности","action_delete_messages":"Удалить сообщения","action_block_contact":"Заблокировать контакт","action_report_chat":"Сообщить о нарушении","delete_messages_warning":"Вы действительно хотите удалить все сообщения?","leave_chat_warning":"Вы действительно хотите покинуть этот чат?","block_contact_warning":"Вы действительно заблокировать этот контакт?","report_chat_warning":"Вы действительно хотите сообщить о нарушении и заблокировать этот чат?","action_clear_messages":"Удалить сообщения","clear_messages_warning":"Вы действительно хотите удалить все сообщения в чате? Их будет невозможно восстановить.","topic_delete_warning":"Вы действительно хотите удалить этот чат?","topic_block_warning":"Вы действительно хотите заблокировать этот чат?","search_no_results":"Ничего не найдено","deleted_content":"удалено","image_caption_prompt":"Подпись к фото","label_incognito_mode":"Режим инкогнито:","delete_account":"Удалить аккаунт","delete_account_arning":"Вы уверены, что ходите удалить свой аккаунт? Его невозможно будет восстановить.","button_delete_account":"Удалить аккаунт","sidepanel_title_acc_security":"Безопасность","sidepanel_title_acc_notifications":"Уведомления","sidepanel_title_acc_support":"Поддержка","label_sdk":"SDK:","label_server_address":"Адрес сервера:","button_edit":"Редактировать","button_add_another":"Добавить","sidepanel_title_acc_general":"Общие настройки","blocked_contacts_link":"Заблокированные ({count})","sidepanel_title_blocked":"Заблокированные чаты","push_init_failed":"Ошибка инициализации пуш уведомлений","invalid_security_token":"Токен некорректен","no_connection":"Нет связи","code_doesnot_match":"Код не совпадает","channel_prompt":"Создать канал","channel":"канал"},"zh":{"archived_contacts":"已归档联系人 ({count})","contacts_not_found":"你尚无会话
¯∖_(ツ)_/¯","full_name_prompt":"全名,例如张伟","email_prompt":"电子邮件,例如 zhang@example.com","button_sign_up":"注册","label_your_name":"你的姓名","label_password":"密码","password_unchanged_prompt":"未改变","label_user_id":"地址:","label_default_access_mode":"蓦然访问模式:","label_message_sound":"消息提示音:","label_push_notifications":"通知提醒:","label_push_notifications_disabled":"通知提醒(需要 HTTPS):","title_tag_manager":"标签(用户发现)","button_logout":"登出","requested_permissions":"已请求","granted_permissions":"已授予","menu_item_edit_permissions":"编辑权限","label_other_user":"其他","title_info":"信息","label_topic_name":"名称","label_private":"私人评论","private_editing_placeholder":"仅自己可见","label_muting_topic":"已静音:","action_more":"更多","label_your_permissions":"你的权限:","label_permissions":"权限:","label_you":"你:","label_default_access":"默认权限模式:","label_group_members":"群组成员:","button_add_members":"添加成员","group_has_no_members":"无成员","action_leave_chat":"离开","login_prompt":"登录","password_prompt":"密码","stay_logged_in":"保持登录","forgot_password_link":"忘记密码?","button_sign_in":"登录","label_client":"客户端:","label_server":"服务器:","online_now":"在线","last_seen_timestamp":"最后可见","title_not_found":"无法找到","unnamed_topic":"未命名","messages_not_readable":"无消息访问权限","peers_messaging_disabled":"成员间消息已禁用。","enable_peers_messaging":"启用","tabtitle_find_user":"搜索","tabtitle_new_group":"新群组","tabtitle_group_by_id":"通过 id","search_for_contacts":"使用搜索寻找联系人","new_password_placeholder":"输入新密码","label_reset_password":"发送密码重置邮件:","credential_email_prompt":"你的注册邮箱","button_reset":"重置","button_send_request":"发送请求","label_server_to_use":"使用的服务器:","label_wire_transport":"线路传输:","button_update":"更新","sidepanel_title_login":"登录","sidepanel_title_register":"创建账户","sidepanel_title_settings":"设置","sidepanel_title_account_settings":"帐号设定","sidepanel_title_newtpk":"开始新会话","sidepanel_title_cred":"确认凭据","sidepanel_title_reset":"重置密码","sidepanel_title_archive":"已存档会话","update_available":"更新可用。","reload_update":"重新载入","reconnect_countdown":"连接已断开。{seconds} 秒后重新连接…","reconnect_now":"立即尝试","phone_dative":"电话","email_dative":"电子邮件","enter_confirmation_code_prompt":"输入通过{method}发送的验证码:","numeric_confirmation_code_prompt":"仅数字","button_confirm":"确认","save_attachment":"保存","invalid_content":"无效内容","user_not_found":"未找到","badge_you":"你","badge_owner":"所有者","menu_item_info":"信息","menu_item_clear_messages":"清空消息","menu_item_clear_messages_for_all":"全部清除","menu_item_delete":"删除","menu_item_delete_for_all":"全部删除","menu_item_mute":"静音","menu_item_unmute":"取消静音","menu_item_delete_topic":"删除","menu_item_unblock":"取消屏蔽","menu_item_block":"屏蔽","menu_item_member_delete":"移除","menu_item_archive_topic":"归档","action_cancel":"取消","upload_finishing":"正在结束...","no_contacts":"你尚无联系人 (._.)","contacts_not_found_short":"无联系人匹配\'\'{query}\'\'","title_group_members":"群组成员","title_all_contacts":"全部联系人","button_ok":"好","button_cancel":"取消","download_action":"下载","label_file_name":"文件名:","label_content_type":"内容类型:","label_size":"大小:","chat_invitation":"你受邀开始新会话。你想怎么做?","chat_invitation_accept":"接受","chat_invitation_ignore":"忽略","chat_invitation_block":"屏蔽","error_invalid_id":"无效 ID","group_user_id_prompt":"群组或用户 ID","button_subscribe":"订阅","topic_name_editing_placeholder":"群组自由格式名称","button_create":"创建","permission_join":"加入 ({val})","permission_read":"读取 ({val})","permission_write":"写入 ({val})","permission_pres":"获取通知 ({val})","permission_admin":"批准 ({val})","permission_share":"分享 ({val})","permission_delete":"删除 ({val})","permission_owner":"所有者 ({val})","title_permissions":"权限","message_sending":"正在发送...","message_sending_failed":"发送失败","search_placeholder":"列表如 email:alice@example.com, tel:+17025550003...","messaging_disabled_prompt":"消息已禁用","new_message_prompt":"新消息","file_attachment_too_large":"文件大小 {size} 超过 {limit} 限制。","cannot_initiate_file_upload":"无法初始化文件上传。","tags_not_found":"尚未定义标签。添加一些。","tags_editor_no_tags":"添加一些标签","title_manage_tags":"管理标签","more_online_members":"还有{overflow}个","label_user_contacts":"往来:","validate_credential_action":"确认","link_contact_us":"联系我们","link_terms_of_service":"条款和条件","link_privacy_policy":"隐私政策","action_delete_messages":"删除所有帖子","action_block_contact":"屏蔽联系人","delete_messages_warning":"您确定要删除所有消息吗?无法撤消。","leave_chat_warning":"您确定要退出此对话吗?","block_contact_warning":"您确定要阻止此联系人吗?","action_report_chat":"检举垃圾邮件","report_chat_warning":"您确定要停止并报告此对话吗?","action_clear_messages":"删除讯息","clear_messages_warning":"您确定要清除所有消息吗?无法撤消。","topic_delete_warning":"您确定要删除此对话吗?","topic_block_warning":"您确定要阻止此对话吗?","search_no_results":"搜索返回任何结果","deleted_content":"内容已删除","image_caption_prompt":"图片标题","menu_item_send_retry":"重试","label_incognito_mode":"无痕模式:","delete_account":"删除帐户","delete_account_arning":"您确定要删除您的帐户吗?无法撤消。","button_delete_account":"删除帐户","sidepanel_title_acc_security":"安全","sidepanel_title_acc_notifications":"通知","sidepanel_title_acc_support":"支持","label_sdk":"开发包:","label_server_address":"服务器地址:","button_edit":"编辑","button_add_another":"加上另一个","sidepanel_title_acc_general":"常用设定","blocked_contacts_link":"封锁的联络人 ({count})","sidepanel_title_blocked":"被阻止的聊天","push_init_failed":"初始化推送通知失败","invalid_security_token":"无效的安全令牌","no_connection":"无连接","code_doesnot_match":"代码不匹配","channel_prompt":"这是一个频道","channel":"频道"}}'),l=firebase,r=(firebase.messaging,Tinode),c=e.n(r);class d extends s().PureComponent{render(){return this.props.visible?s().createElement("div",{className:"alert-container"},s().createElement("div",{className:"alert"},s().createElement("div",{className:"title"},this.props.title),s().createElement("div",{className:"content"},this.props.content),s().createElement("div",{className:"dialog-buttons"},this.props.onReject?s().createElement("button",{className:"outline",onClick:this.props.onReject},this.props.reject||s().createElement(n.FormattedMessage,{id:"button_cancel"})):null,s().createElement("button",{className:"blue",onClick:this.props.onConfirm},this.props.confirm||s().createElement(n.FormattedMessage,{id:"button_ok"}))))):null}}const h="TinodeWeb/0.16.10",p={hosted:"web.tinode.co",local:"localhost:6060"},m=p.hosted,u=3e3,_="JRWPS",g=13,b=128,v=262144,f=1<<23,E=1024,w=60,C=(0,n.defineMessages)({info:{id:"menu_item_info",defaultMessage:[{type:0,value:"Info"}]},clear_messages:{id:"menu_item_clear_messages",defaultMessage:[{type:0,value:"Clear messages"}]},clear_for_all:{id:"menu_item_clear_messages_for_all",defaultMessage:[{type:0,value:"Clear for All"}]},delete:{id:"menu_item_delete",defaultMessage:[{type:0,value:"Delete"}]},delete_for_all:{id:"menu_item_delete_for_all",defaultMessage:[{type:0,value:"Delete for All"}]},send_retry:{id:"menu_item_send_retry",defaultMessage:[{type:0,value:"Retry"}]},mute:{id:"menu_item_mute",defaultMessage:[{type:0,value:"Mute"}]},unmute:{id:"menu_item_unmute",defaultMessage:[{type:0,value:"Unmute"}]},topic_delete:{id:"menu_item_delete_topic",defaultMessage:[{type:0,value:"Delete"}]},topic_delete_warning:{id:"topic_delete_warning",defaultMessage:[{type:0,value:"Are you sure you want to delete this conversation?"}]},unblock:{id:"menu_item_unblock",defaultMessage:[{type:0,value:"Unblock"}]},block:{id:"menu_item_block",defaultMessage:[{type:0,value:"Block"}]},topic_block_warning:{id:"topic_block_warning",defaultMessage:[{type:0,value:"Are you sure you want to block this conversation?"}]},member_delete:{id:"menu_item_member_delete",defaultMessage:[{type:0,value:"Remove"}]},archive:{id:"menu_item_archive_topic",defaultMessage:[{type:0,value:"Archive"}]}});class S extends s().Component{constructor(e){super(e);const{formatMessage:t}=e.intl;this.handlePageClick=this.handlePageClick.bind(this),this.handleEscapeKey=this.handleEscapeKey.bind(this),this.handleClick=this.handleClick.bind(this),this.MenuItems={topic_info:{id:"topic_info",title:t(C.info),handler:null},messages_clear:{id:"messages_clear",title:t(C.clear_messages),handler:(s,a)=>e.onShowAlert(t(C.menu_item_clear_messages),t({id:"clear_messages_warning"}),(()=>{this.deleteMessages(!0,!1,s,a)}),null,!0,null)},messages_clear_hard:{id:"messages_clear_hard",title:t(C.clear_for_all),handler:(s,a)=>e.onShowAlert(t(C.menu_item_clear_messages_for_all),t({id:"delete_messages_warning"}),(()=>this.deleteMessages(!0,!0,s,a)),null,!0,null)},message_delete:{id:"message_delete",title:t(C.delete),handler:(e,t)=>this.deleteMessages(!1,!1,e,t)},message_delete_hard:{id:"message_delete_hard",title:t(C.delete_for_all),handler:(e,t)=>this.deleteMessages(!1,!0,e,t)},menu_item_send_retry:{id:"menu_item_send_retry",title:t(C.send_retry),handler:(e,t)=>this.retryMessage(e,t)},topic_unmute:{id:"topic_unmute",title:t(C.unmute),handler:this.topicPermissionSetter.bind(this,"+P")},topic_mute:{id:"topic_mute",title:t(C.mute),handler:this.topicPermissionSetter.bind(this,"-P")},topic_unblock:{id:"topic_unblock",title:t(C.unblock),handler:this.topicPermissionSetter.bind(this,"+JP")},topic_block:{id:"topic_block",title:t(C.block),handler:(s,a)=>e.onShowAlert(t(C.menu_item_block),t(C.topic_block_warning),(()=>this.topicPermissionSetter("-JP",s,a).then((e=>(this.props.onTopicRemoved(s.topicName),e)))),null,!0,null)},topic_delete:{id:"topic_delete",title:t(C.topic_delete),handler:(s,a)=>e.onShowAlert(t(C.menu_item_delete_topic),t(C.topic_delete_warning),(()=>{const e=this.props.tinode.getTopic(s.topicName);if(e)return e.delTopic(!0).catch((e=>{a&&a(e.message,"err")}));console.log("Topic not found: ",s.topicName)}),null,!0,null)},topic_archive:{id:"topic_archive",title:t(C.archive),handler:(e,t)=>{const s=this.props.tinode.getTopic(e.topicName);if(s)return s.archive(!0).catch((e=>{t&&t(e.message,"err")}));console.log("Topic not found: ",e.topicName)}},permissions:{id:"permissions",title:t({id:"menu_item_edit_permissions"}),handler:null},member_delete:{id:"member_delete",title:t(C.member_delete),handler:(e,t)=>{const s=this.props.tinode.getTopic(e.topicName);if(s&&e.user)return s.delSubscription(e.user).catch((e=>{t&&t(e.message,"err")}));console.log("Topic or user not found: '"+e.topicName+"', '"+e.user+"'")}},member_mute:{id:"member_mute",title:t(C.mute),handler:this.topicPermissionSetter.bind(this,"-P")},member_unmute:{id:"member_unmute",title:t(C.unmute),handler:this.topicPermissionSetter.bind(this,"+P")},member_block:{id:"member_block",title:t(C.block),handler:this.topicPermissionSetter.bind(this,"-JP")},member_unblock:{id:"member_unblock",title:t(C.unblock),handler:this.topicPermissionSetter.bind(this,"+JP")}}}componentDidMount(){document.addEventListener("mousedown",this.handlePageClick,!1),document.addEventListener("keyup",this.handleEscapeKey,!1)}componentWillUnmount(){document.removeEventListener("mousedown",this.handlePageClick,!1),document.removeEventListener("keyup",this.handleEscapeKey,!1)}handlePageClick(e){i().findDOMNode(this).contains(e.target)||(e.preventDefault(),e.stopPropagation(),this.props.hide())}handleEscapeKey(e){27===e.keyCode&&this.props.hide()}handleClick(e){e.preventDefault(),e.stopPropagation(),this.props.hide();let t=this.props.items[e.currentTarget.dataset.id];"string"==typeof t&&(t=this.MenuItems[t]),t?this.props.onAction(t.id,t.handler(this.props.params,this.props.onError),this.props.params):console.log("Invalid menu item ID",e.currentTarget.dataset.id)}deleteMessages(e,t,s,a){const i=this.props.tinode.getTopic(s.topicName);if(!i)return void console.log("Topic not found: ",s.topicName);if(!e&&i.cancelSend(s.seq))return;return(e?i.delMessagesAll(t):i.delMessagesList([s.seq],t)).catch((e=>{a&&a(e.message,"err")}))}retryMessage(e,t){const s=this.props.tinode.getTopic(e.topicName);if(!s||!s.flushMessage(e.seq))return;const a=s.createMessage(e.content,!1);return s.publishDraft(a).catch((e=>{t&&t(e.message,"err")}))}topicPermissionSetter(e,t,s){const a=this.props.tinode.getTopic(t.topicName);if(!a)return void console.log("Topic not found",t.topicName);let i=a.updateMode(t.user,e);return s&&(i=i.catch((e=>{s(e.message,"err")}))),i}render(){let e=0,t=[];this.props.items.map((a=>{"string"==typeof a&&(a=this.MenuItems[a]),a&&a.title&&t.push("-"==a.title?s().createElement("li",{className:"separator",key:e}):s().createElement("li",{onClick:this.handleClick,"data-id":e,key:e},a.title)),e++}));const a=g*(.7+2.5*t.length),i={left:(this.props.bounds.right-this.props.clickAt.x<156?this.props.clickAt.x-this.props.bounds.left-156:this.props.clickAt.x-this.props.bounds.left)+"px",top:(this.props.bounds.bottom-this.props.clickAt.y0?a<3?2:a<30?1:0:0;return a.toFixed(i)+" "+t[s]}class N extends s().PureComponent{render(){let e;if(!0===this.props.avatar){const t="grp"==c().topicType(this.props.topic),a=(t?"light-color":"dark-color")+Math.abs(function(e){let t=0;e=""+e;for(let s=0;s
"},{type:0,value:"¯∖_(ツ)_/¯"}]},(e=>s().createElement(W,{connected:this.props.connected,contacts:this.state.contactList,emptyListMessage:e,topicSelected:this.props.topicSelected,myUserId:this.props.myUserId,showOnline:!0,showUnread:!0,onTopicSelected:this.props.onTopicSelected,showContextMenu:this.props.showContextMenu,onAction:this.handleAction})))}}class He{static setObject(e,t){localStorage.setItem(e,JSON.stringify(t))}static getObject(e){const t=localStorage.getItem(e);return t&&JSON.parse(t)}static updateObject(e,t){const s=this.getObject(e);this.setObject(e,Object.assign(s||{},t))}static removeItem(e){localStorage.removeItem(e)}}class Ke extends s().PureComponent{constructor(e){super(e),this.state={login:"",password:"",email:"",fn:"",imageDataUrl:null,errorCleared:!1,saveToken:He.getObject("keep-logged-in")},this.handleLoginChange=this.handleLoginChange.bind(this),this.handlePasswordChange=this.handlePasswordChange.bind(this),this.handleEmailChange=this.handleEmailChange.bind(this),this.handleFnChange=this.handleFnChange.bind(this),this.handleImageChanged=this.handleImageChanged.bind(this),this.handleToggleSaveToken=this.handleToggleSaveToken.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}handleLoginChange(e){this.setState({login:e.target.value})}handlePasswordChange(e){this.setState({password:e})}handleEmailChange(e){this.setState({email:e.target.value})}handleFnChange(e){this.setState({fn:e.target.value})}handleImageChanged(e){this.setState({imageDataUrl:e})}handleToggleSaveToken(){He.setObject("keep-logged-in",!this.state.saveToken),this.setState({saveToken:!this.state.saveToken})}handleSubmit(e){e.preventDefault(),this.setState({errorCleared:!1}),this.props.onCreateAccount(this.state.login.trim(),this.state.password.trim(),oe(this.state.fn.trim().substring(0,w),this.state.imageDataUrl),{meth:"email",val:this.state.email})}render(){let e="blue";return this.props.disabled&&(e+=" disabled"),s().createElement("form",{className:"panel-form-column",onSubmit:this.handleSubmit},s().createElement("div",{className:"panel-form-row"},s().createElement("div",{className:"panel-form-column"},s().createElement(n.FormattedMessage,{id:"login_prompt"},(e=>s().createElement("input",{type:"text",placeholder:e,autoComplete:"user-name",value:this.state.login,onChange:this.handleLoginChange,required:!0,autoFocus:!0}))),s().createElement(n.FormattedMessage,{id:"password_prompt"},(e=>s().createElement($,{placeholder:e,autoComplete:"new-password",value:this.state.password,onFinished:this.handlePasswordChange,required:!0})))),s().createElement(x,{onImageChanged:this.handleImageChanged,onError:this.props.onError})),s().createElement("div",{className:"panel-form-row"},s().createElement(n.FormattedMessage,{id:"full_name_prompt",defaultMessage:[{type:0,value:"Full name, e.g. John Doe"}]},(e=>s().createElement("input",{type:"text",placeholder:e,autoComplete:"name",value:this.state.fn,onChange:this.handleFnChange,required:!0})))),s().createElement("div",{className:"panel-form-row"},s().createElement(n.FormattedMessage,{id:"email_prompt",defaultMessage:[{type:0,value:"Email, e.g. jdoe@example.com"}]},(e=>s().createElement("input",{type:"email",placeholder:e,autoComplete:"email",value:this.state.email,onChange:this.handleEmailChange,required:!0})))),s().createElement("div",{className:"panel-form-row"},s().createElement(R,{id:"save-token",name:"save-token",checked:this.state.saveToken,onChange:this.handleToggleSaveToken}),s().createElement(n.FormattedMessage,{id:"stay_logged_in"},(e=>s().createElement("label",{htmlFor:"save-token"}," ",e)))),s().createElement("div",{className:"dialog-buttons"},s().createElement("button",{className:e,type:"submit"},s().createElement(n.FormattedMessage,{id:"button_sign_up",defaultMessage:[{type:0,value:"Sign up"}]}))))}}class We extends s().Component{constructor(e){super(e);const t=this.props.tinode.getMeTopic();this.state={fullName:t.public?t.public.fn:void 0,avatar:P(t.public?t.public.photo:null)}}render(){return s().createElement("div",{className:"scrollable-panel"},s().createElement("div",{className:"panel-form-row"},s().createElement("div",{className:"panel-form-column"},s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_your_name",defaultMessage:[{type:0,value:"Your name"}]})),s().createElement("div",{className:"large"},this.state.fullName),s().createElement("div",null,s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_user_id",defaultMessage:[{type:0,value:"ID:"}]}))," ",s().createElement("tt",null,this.props.myUserId))),s().createElement(x,{avatar:this.state.avatar,readOnly:!this.state.owner,uid:this.props.myUserId,title:this.state.fullName})),s().createElement("div",{className:"panel-form-row"},s().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onBasicNavigate("general")}},s().createElement("i",{className:"material-icons"},"edit")," ",s().createElement(n.FormattedMessage,{id:"button_edit",defaultMessage:[{type:0,value:"Edit"}]}))),s().createElement("div",{className:"hr"}),s().createElement("div",{className:"panel-form-column"},s().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onBasicNavigate("notif")}},s().createElement("i",{className:"material-icons"},"notifications")," ",s().createElement(n.FormattedMessage,{id:"sidepanel_title_acc_notifications"})),s().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onBasicNavigate("security")}},s().createElement("i",{className:"material-icons"},"security")," ",s().createElement(n.FormattedMessage,{id:"sidepanel_title_acc_security"})),s().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onBasicNavigate("support")}},s().createElement("i",{className:"material-icons"},"contact_support")," ",s().createElement(n.FormattedMessage,{id:"sidepanel_title_acc_support"}))))}}class Ve extends s().Component{constructor(e){super(e);const t=this.props.tinode.getMeTopic();this.state={fullName:t.public?t.public.fn:void 0,avatar:P(t.public?t.public.photo:null),tags:t.tags(),credentials:t.getCredentials()||[],addCredActive:!1,addCredInvalid:!1,newCred:"",previousOnTags:t.onTagsUpdated},this.tnNewTags=this.tnNewTags.bind(this),this.tnCredsUpdated=this.tnCredsUpdated.bind(this),this.handleFullNameUpdate=this.handleFullNameUpdate.bind(this),this.handleImageChanged=this.handleImageChanged.bind(this),this.handleCredChange=this.handleCredChange.bind(this),this.handleCredKeyDown=this.handleCredKeyDown.bind(this),this.handleCredEntered=this.handleCredEntered.bind(this),this.handleTagsUpdated=this.handleTagsUpdated.bind(this)}componentDidMount(){const e=this.props.tinode.getMeTopic();e.onCredsUpdated=this.tnCredsUpdated,e.onTagsUpdated=this.tnNewTags}componentWillUnmount(){const e=this.props.tinode.getMeTopic();e.onTagsUpdated=this.state.previousOnTags,e.onCredsUpdated=void 0}tnNewTags(e){this.setState({tags:e})}tnCredsUpdated(e){this.setState({credentials:e||[]})}handleFullNameUpdate(e){(e=e.trim().substring(0,w))&&(this.setState({fullName:e}),this.props.onUpdateAccount(void 0,oe(e,null)))}handleImageChanged(e){this.setState({avatar:e}),this.props.onUpdateAccount(void 0,oe(null,e||c().DEL_CHAR))}handleCredChange(e){this.setState({newCred:e.target.value,addCredInvalid:!1})}handleCredKeyDown(e){27===e.keyCode?this.setState({newCred:"",addCredActive:!1}):13===e.keyCode&&this.handleCredEntered(e)}handleCredEntered(e){let t=this.state.newCred.trim();if(!t)return void this.setState({addCredActive:!1,addCredInvalid:!1});let s,a=function(e){return e=e.trim(),/^(?:\+?(\d{1,3}))?[- (.]*(\d{3})[- ).]*(\d{3})[- .]*(\d{2})[- .]*(\d{2})?$/.test(e)?e.replace(/[- ().]*/,""):null}(t);a?s="tel":(a=function(e){return e=e.trim(),/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/.test(e)?e:null}(t),a&&(s="email")),s?(this.props.onCredAdd(s,a),this.setState({addCredActive:!1,newCred:""})):this.setState({addCredInvalid:!0})}handleTagsUpdated(e){le(this.state.tags.slice(0),e.slice(0))||this.props.onUpdateTags(e)}render(){const e=[];return this.state.credentials.map((t=>{e.push(s().createElement("div",{key:t.meth+":"+t.val+":"+t.done},t.meth,": ",s().createElement("tt",null,t.val),s().createElement("span",null," ",t.done?null:s().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onCredConfirm(t.meth,t.val)}},s().createElement(n.FormattedMessage,{id:"validate_credential_action",defaultMessage:[{type:0,value:"confirm"}]}))," ",s().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onCredDelete(t.meth,t.val)}},s().createElement("i",{className:"material-icons gray"},"delete_outline")))))})),s().createElement("div",{className:"scrollable-panel"},s().createElement("div",{className:"panel-form-row"},s().createElement("div",{className:"panel-form-column"},s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_your_name"})),s().createElement("div",null,s().createElement(n.FormattedMessage,{id:"full_name_prompt"},(e=>s().createElement(ee,{placeholder:e,value:this.state.fullName,onFinished:this.handleFullNameUpdate}))))),s().createElement(x,{avatar:this.state.avatar,uid:this.props.myUserId,title:this.state.fullName,onImageChanged:this.handleImageChanged,onError:this.props.onError})),s().createElement("div",{className:"hr"}),s().createElement(n.FormattedMessage,{id:"title_tag_manager",defaultMessage:[{type:0,value:"Tags (user discovery)"}]},(e=>s().createElement(ce,{title:e,activated:!1,tags:this.state.tags,tinode:this.props.tinode,onSubmit:this.handleTagsUpdated}))),s().createElement("div",{className:"hr"}),s().createElement("div",{className:"panel-form-column"},s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_user_contacts",defaultMessage:[{type:0,value:"Contacts:"}]})),s().createElement("div",{className:"quoted"},e,this.state.addCredActive?s().createElement("input",{type:"text",value:this.state.value,className:this.state.addCredInvalid?"invalid":null,placeholder:"Phone number or email",required:"required",autoFocus:!0,onChange:this.handleCredChange,onKeyDown:this.handleCredKeyDown,onBlur:this.handleCredEntered}):null,s().createElement("div",null,s().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.setState({addCredActive:!0})}},s().createElement("i",{className:"material-icons"},"add"),s().createElement(n.FormattedMessage,{id:"button_add_another",defaultMessage:[{type:0,value:"Add another"}]}))))))}}class Ge extends s().PureComponent{constructor(e){super(e),this.handleCheckboxClick=this.handleCheckboxClick.bind(this)}handleCheckboxClick(e,t){"sound"==e?this.props.onToggleMessageSounds(t):"alert"==e?this.props.onTogglePushNotifications(t):"incognito"==e&&this.props.onToggleIncognitoMode(t)}render(){return s().createElement("div",{className:"scrollable-panel"},s().createElement("div",{className:"panel-form-row"},s().createElement("label",{htmlFor:"message-sound"},s().createElement(n.FormattedMessage,{id:"label_message_sound",defaultMessage:[{type:0,value:"Message sound:"}]})),s().createElement(R,{name:"sound",id:"message-sound",checked:this.props.messageSounds,onChange:this.handleCheckboxClick})),s().createElement("div",{className:"panel-form-row"},s().createElement("label",{htmlFor:"desktop-alerts"},this.props.desktopAlertsEnabled?s().createElement(n.FormattedMessage,{id:"label_push_notifications",defaultMessage:[{type:0,value:"Notification alerts:"}]}):s().createElement(n.FormattedMessage,{id:"label_push_notifications_disabled",defaultMessage:[{type:0,value:"Notification alerts (requires HTTPS):"}]})),s().createElement(R,{name:"alert",id:"desktop-alerts",checked:this.props.desktopAlerts,onChange:this.props.desktopAlertsEnabled?this.handleCheckboxClick:null})),s().createElement("div",{className:"panel-form-row"},s().createElement("label",{htmlFor:"incognito-mode"},s().createElement(n.FormattedMessage,{id:"label_incognito_mode",defaultMessage:[{type:0,value:"Incognito mode:"}]})),s().createElement(R,{name:"incognito",id:"incognito-mode",checked:this.props.incognitoMode,onChange:this.handleCheckboxClick})))}}const Je=(0,n.defineMessages)({delete_account:{id:"delete_account",defaultMessage:[{type:0,value:"Delete account"}]},delete_account_warning:{id:"delete_account_arning",defaultMessage:[{type:0,value:"Are you sure you want to delete your account? It cannot be undone."}]}});class Qe extends s().Component{constructor(e){super(e);const t=this.props.tinode.getMeTopic();let s=0;t.contacts((e=>{e.acs&&!e.acs.isJoiner()&&s++}));const a=t.getDefaultAccess();this.state={auth:a?a.auth:null,anon:a?a.anon:null,showPermissionEditorFor:void 0,blockedCount:s},this.handlePasswordUpdate=this.handlePasswordUpdate.bind(this),this.handleLaunchPermissionsEditor=this.handleLaunchPermissionsEditor.bind(this),this.handleHidePermissionsEditor=this.handleHidePermissionsEditor.bind(this),this.handlePermissionsChanged=this.handlePermissionsChanged.bind(this),this.handleDeleteAccount=this.handleDeleteAccount.bind(this)}handlePasswordUpdate(e){this.setState({password:e}),this.props.onUpdateAccount(e)}handleLaunchPermissionsEditor(e){this.setState({showPermissionEditorFor:e,editedPermissions:this.state[e]})}handleHidePermissionsEditor(){this.setState({showPermissionEditorFor:void 0})}handlePermissionsChanged(e){let t={};t[this.state.showPermissionEditorFor]=e,this.props.onUpdateAccount(void 0,void 0,t);let s={showPermissionEditorFor:void 0};s[this.state.showPermissionEditorFor]=e,this.setState(s)}handleDeleteAccount(e){e.preventDefault();const{formatMessage:t}=this.props.intl;this.props.onShowAlert(t(Je.delete_account),t(Je.delete_account_warning),(()=>{this.props.onDeleteAccount()}),null,!0,null)}render(){return s().createElement(s().Fragment,null,this.state.showPermissionEditorFor?s().createElement(ie,{mode:this.state.editedPermissions,skip:"O",onSubmit:this.handlePermissionsChanged,onCancel:this.handleHidePermissionsEditor}):s().createElement("div",{className:"scrollable-panel"},s().createElement("div",{className:"panel-form-column"},s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_password",defaultMessage:[{type:0,value:"Password"}]})),s().createElement("div",null,s().createElement(n.FormattedMessage,{id:"password_unchanged_prompt",defaultMessage:[{type:0,value:"Unchanged"}]},(e=>s().createElement(ee,{placeholder:e,type:"password",onFinished:this.handlePasswordUpdate}))))),s().createElement("div",{className:"hr"}),s().createElement("div",{className:"panel-form-column"},s().createElement("a",{href:"#",className:"red flat-button",onClick:e=>{e.preventDefault(),this.props.onLogout()}},s().createElement("i",{className:"material-icons"},"exit_to_app")," ",s().createElement(n.FormattedMessage,{id:"button_logout",defaultMessage:[{type:0,value:"Logout"}]})),s().createElement("a",{href:"#",className:"red flat-button",onClick:e=>{this.handleDeleteAccount(e)}},s().createElement("i",{className:"material-icons"},"delete")," ",s().createElement(n.FormattedMessage,{id:"button_delete_account",defaultMessage:[{type:0,value:"Delete account"}]}))),s().createElement("div",{className:"hr"}),s().createElement("div",{className:"panel-form-column"},s().createElement("div",null,s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_default_access_mode",defaultMessage:[{type:0,value:"Default access mode:"}]}))),s().createElement("div",{className:"quoted"},s().createElement("div",null,"Auth: ",s().createElement("tt",{className:"clickable",onClick:this.handleLaunchPermissionsEditor.bind(this,"auth")},this.state.auth)),s().createElement("div",null,"Anon: ",s().createElement("tt",{className:"clickable",onClick:this.handleLaunchPermissionsEditor.bind(this,"anon")},this.state.anon)))),this.state.blockedCount>0?s().createElement(s().Fragment,null,s().createElement("div",{className:"hr"}),s().createElement("div",{className:"panel-form-row"},s().createElement("i",{className:"material-icons"},"block")," ",s().createElement("a",{href:"#",className:"gray",onClick:e=>{e.preventDefault(),this.props.onShowBlocked()}},s().createElement(n.FormattedMessage,{id:"blocked_contacts_link",defaultMessage:[{type:0,value:"Blocked contacts ("},{type:1,value:"count"},{type:0,value:")"}],values:{count:this.state.blockedCount}})))):null))}}var Ye=(0,n.injectIntl)(Qe);class Ze extends s().PureComponent{render(){return s().createElement("div",{className:"scrollable-panel"},s().createElement("div",{className:"panel-form-column"},s().createElement("a",{href:"email:info@tinode.co",className:"flat-button",target:"_blank"},s().createElement("i",{className:"material-icons"},"email")," ",s().createElement(n.FormattedMessage,{id:"link_contact_us",defaultMessage:[{type:0,value:"Contact Us"}]})),s().createElement("a",{href:"https://tinode.co/terms.html",className:"flat-button",target:"_blank"},s().createElement("i",{className:"material-icons"},"description")," ",s().createElement(n.FormattedMessage,{id:"link_terms_of_service",defaultMessage:[{type:0,value:"Terms of Service"}]})),s().createElement("a",{href:"https://tinode.co/privacy.html",className:"flat-button",target:"_blank"},s().createElement("i",{className:"material-icons"},"policy")," ",s().createElement(n.FormattedMessage,{id:"link_privacy_policy",defaultMessage:[{type:0,value:"Privacy Policy"}]}))),s().createElement("div",{className:"hr"}),s().createElement("div",{className:"panel-form-column"},s().createElement("div",{className:"panel-form-row"},s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_client"})),h),s().createElement("div",{className:"panel-form-row"},s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_sdk",defaultMessage:[{type:0,value:"SDK:"}]})),c().getLibrary()),s().createElement("div",{className:"panel-form-row"},s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_server"})),this.props.serverVersion),s().createElement("div",{className:"panel-form-row"},s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_server_address",defaultMessage:[{type:0,value:"Server address:"}]})),this.props.serverAddress)))}}class Xe extends s().Component{constructor(e){super(e),this.state={login:e.login,password:"",hostName:e.serverAddress,saveToken:He.getObject("keep-logged-in")},this.handleLoginChange=this.handleLoginChange.bind(this),this.handlePasswordChange=this.handlePasswordChange.bind(this),this.handleToggleSaveToken=this.handleToggleSaveToken.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}handleLoginChange(e){this.setState({login:e.target.value})}handlePasswordChange(e){this.setState({password:e.target.value})}handleToggleSaveToken(){He.setObject("keep-logged-in",!this.state.saveToken),this.setState({saveToken:!this.state.saveToken})}handleSubmit(e){e.preventDefault(),this.props.onLogin(this.state.login.trim(),this.state.password.trim())}render(){var e="blue";return this.props.disabled&&(e+=" disabled"),s().createElement("form",{id:"login-form",onSubmit:this.handleSubmit},s().createElement(n.FormattedMessage,{id:"login_prompt",defaultMessage:[{type:0,value:"Login"}]},(e=>s().createElement("input",{type:"text",id:"inputLogin",placeholder:e,autoComplete:"username",autoCorrect:"off",autoCapitalize:"none",value:this.state.login,onChange:this.handleLoginChange,required:!0,autoFocus:!0}))),s().createElement(n.FormattedMessage,{id:"password_prompt",defaultMessage:[{type:0,value:"Password"}]},(e=>s().createElement($,{type:"password",id:"inputPassword",placeholder:e,autoComplete:"current-password",value:this.state.password,onChange:this.handlePasswordChange,required:!0}))),s().createElement("div",{className:"panel-form-row"},s().createElement(R,{id:"save-token",name:"save-token",checked:this.state.saveToken,onChange:this.handleToggleSaveToken}),s().createElement("label",{htmlFor:"save-token"}," ",s().createElement(n.FormattedMessage,{id:"stay_logged_in",defaultMessage:[{type:0,value:"Stay logged in"}]})),s().createElement("a",{href:"#reset"},s().createElement(n.FormattedMessage,{id:"forgot_password_link",defaultMessage:[{type:0,value:"Forgot password?"}]}))),s().createElement("div",{className:"dialog-buttons"},s().createElement("button",{className:e,type:"submit"},s().createElement(n.FormattedMessage,{id:"button_sign_in",defaultMessage:[{type:0,value:"Sign in"}]}))))}}const $e=(0,n.defineMessages)({invalid_id:{id:"error_invalid_id",defaultMessage:[{type:0,value:"Invalid ID"}]}});class et extends s().PureComponent{constructor(e){super(e),this.state={groupId:""},this.handleChange=this.handleChange.bind(this),this.handleKeyPress=this.handleKeyPress.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}handleChange(e){this.setState({groupId:e.target.value})}handleKeyPress(e){"Enter"===e.key&&this.handleSubmit(e)}handleSubmit(e){if(e.preventDefault(),this.state.groupId){var t=this.state.groupId.trim();t.length>3&&("usr"==t.substr(0,3)||"grp"==t.substr(0,3))?this.props.onSubmit(t):this.props.onError(this.props.intl.formatMessage($e.invalid_id),"err")}}render(){return s().createElement("div",{className:"panel-form"},s().createElement("div",{className:"panel-form-row"},s().createElement(n.FormattedMessage,{id:"group_user_id_prompt",defaultMessage:[{type:0,value:"Group or User ID"}]},(e=>s().createElement("input",{type:"text",placeholder:e,value:this.state.groupId,onChange:this.handleChange,onKeyPress:this.handleKeyPress,required:!0,autoFocus:!0})))),s().createElement("div",{className:"dialog-buttons"},s().createElement("button",{className:"blue",onClick:this.handleSubmit},s().createElement(n.FormattedMessage,{id:"button_subscribe",defaultMessage:[{type:0,value:"Subscribe"}]}))))}}var tt=(0,n.injectIntl)(et);class st extends s().PureComponent{constructor(e){super(e),this.state={fn:"",private:"",imageDataUrl:null,tags:[],isChannel:!1},this.handleFnChange=this.handleFnChange.bind(this),this.handlePrivateChange=this.handlePrivateChange.bind(this),this.handleImageChanged=this.handleImageChanged.bind(this),this.handleTagsChanged=this.handleTagsChanged.bind(this),this.handleChannelToggle=this.handleChannelToggle.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}handleFnChange(e){this.setState({fn:e.target.value})}handlePrivateChange(e){this.setState({private:e.target.value})}handleImageChanged(e){this.setState({imageDataUrl:e})}handleTagsChanged(e){this.setState({tags:e})}handleChannelToggle(){this.setState({isChannel:!this.state.isChannel})}handleSubmit(e){e.preventDefault();const t=this.state.fn.trim().substring(0,w),s=this.state.private.trim().substring(0,w);t&&this.props.onSubmit(t,this.state.imageDataUrl,s,this.state.tags,this.state.isChannel)}render(){var e="blue";return this.props.disabled&&(e+=" disabled"),s().createElement("form",{className:"panel-form",onSubmit:this.handleSubmit},s().createElement("div",{className:"panel-form-row"},s().createElement("div",{className:"panel-form-column"},s().createElement("label",{className:"small",htmlFor:"new-topic-fn"},s().createElement(n.FormattedMessage,{id:"label_topic_name"})),s().createElement(n.FormattedMessage,{id:"topic_name_editing_placeholder",defaultMessage:[{type:0,value:"Freeform name of the group"}]},(e=>s().createElement("input",{type:"text",id:"new-topic-fn",placeholder:e,value:this.state.fn,onChange:this.handleFnChange,autoFocus:!0,required:!0}))),s().createElement("br",null),s().createElement("label",{className:"small",htmlFor:"new-topic-priv"},s().createElement(n.FormattedMessage,{id:"label_private"})),s().createElement(n.FormattedMessage,{id:"private_editing_placeholder"},(e=>s().createElement("input",{type:"text",id:"new-topic-priv",placeholder:e,value:this.state.private,onChange:this.handlePrivateChange})))),s().createElement(x,{onError:this.props.onError,onImageChanged:this.handleImageChanged})),s().createElement("div",{className:"panel-form-row"},s().createElement(R,{checked:this.state.isChannel,onChange:this.handleChannelToggle})," ",s().createElement("label",{onClick:this.handleChannelToggle},s().createElement(n.FormattedMessage,{id:"channel_prompt",defaultMessage:[{type:0,value:"This is a channel"}]}))),s().createElement(n.FormattedMessage,{id:"title_tag_manager"},(e=>s().createElement(ce,{tags:this.state.tags,activated:!0,onTagsChanged:this.handleTagsChanged,tinode:this.props.tinode,title:e}))),s().createElement("div",{className:"dialog-buttons"},s().createElement("button",{className:e},s().createElement(n.FormattedMessage,{id:"button_create",defaultMessage:[{type:0,value:"Create"}]}))))}}class at extends s().PureComponent{constructor(e){super(e),this.state={edited:!1,search:""},this.handleSearchChange=this.handleSearchChange.bind(this),this.handleSearch=this.handleSearch.bind(this),this.handleClear=this.handleClear.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}componentWillUnmount(){this.state.edited&&(this.setState({search:"",edited:!1}),this.props.onSearchContacts(c().DEL_CHAR))}handleSearchChange(e){this.setState({search:e.target.value})}handleSearch(e){e.preventDefault();var t=this.state.search.trim();this.setState({edited:t.length>0}),this.props.onSearchContacts(t.length>0?t:c().DEL_CHAR)}handleClear(e){e.preventDefault(),this.state.edited&&this.props.onSearchContacts(c().DEL_CHAR),this.setState({search:"",edited:!1})}handleKeyDown(e){"Enter"===e.key?this.handleSearch(e):"Escape"===e.key&&this.handleClear()}render(){return s().createElement("div",{className:"panel-form"},s().createElement("div",{className:"panel-form-row"},s().createElement("i",{className:"material-icons search"},"search"),s().createElement(n.FormattedMessage,{id:"search_placeholder",defaultMessage:[{type:0,value:"List like email:alice@example.com, tel:17025550003..."}]},(e=>s().createElement("input",{className:"search",type:"text",placeholder:e,value:this.state.search,onChange:this.handleSearchChange,onKeyDown:this.handleKeyDown,required:!0,autoFocus:!0}))),s().createElement("a",{href:"#",onClick:this.handleClear},s().createElement("i",{className:"material-icons"},"close"))))}}const it=(0,n.defineMessages)({search_for_contacts:{id:"search_for_contacts",defaultMessage:[{type:0,value:"Use search to find contacts"}]},search_no_results:{id:"search_no_results",defaultMessage:[{type:0,value:"Search returned no results"}]}});class nt extends s().Component{constructor(e){super(e),this.state={tabSelected:"p2p",searchQuery:null},this.handleTabClick=this.handleTabClick.bind(this),this.handleSearchContacts=this.handleSearchContacts.bind(this),this.handleContactSelected=this.handleContactSelected.bind(this),this.handleNewGroupSubmit=this.handleNewGroupSubmit.bind(this),this.handleGroupByID=this.handleGroupByID.bind(this)}componentDidMount(){this.props.onInitFind()}handleTabClick(e){e.preventDefault(),Pe.navigateTo(Pe.addUrlParam(window.location.hash,"tab",e.currentTarget.dataset.id)),this.setState({tabSelected:e.currentTarget.dataset.id})}handleSearchContacts(e){this.props.onSearchContacts(e),this.setState({searchQuery:c().isNullValue(e)?null:e})}handleContactSelected(e){"p2p"===this.state.tabSelected&&(Pe.navigateTo(Pe.removeUrlParam(window.location.hash,"tab")),this.props.onCreateTopic(e))}handleNewGroupSubmit(e,t,s,a,i){Pe.navigateTo(Pe.removeUrlParam(window.location.hash,"tab")),this.props.onCreateTopic(void 0,oe(e,t),s,a,i)}handleGroupByID(e){Pe.navigateTo(Pe.removeUrlParam(window.location.hash,"tab")),this.props.onCreateTopic(e)}render(){const{formatMessage:e}=this.props.intl,t=e(this.state.searchQuery?it.search_no_results:it.search_for_contacts);return s().createElement("div",{className:"flex-column"},s().createElement("ul",{className:"tabbar"},s().createElement("li",{className:"p2p"===this.state.tabSelected?"active":null},s().createElement("a",{href:"#","data-id":"p2p",onClick:this.handleTabClick},s().createElement(n.FormattedMessage,{id:"tabtitle_find_user",defaultMessage:[{type:0,value:"find"}]}))),s().createElement("li",{className:"grp"===this.state.tabSelected?"active":null},s().createElement("a",{href:"#","data-id":"grp",onClick:this.handleTabClick},s().createElement(n.FormattedMessage,{id:"tabtitle_new_group",defaultMessage:[{type:0,value:"new group"}]}))),s().createElement("li",{className:"byid"===this.state.tabSelected?"active":null},s().createElement("a",{href:"#","data-id":"byid",onClick:this.handleTabClick},s().createElement(n.FormattedMessage,{id:"tabtitle_group_by_id",defaultMessage:[{type:0,value:"by id"}]})))),"grp"===this.state.tabSelected?s().createElement(st,{tinode:this.props.tinode,onSubmit:this.handleNewGroupSubmit}):"byid"===this.state.tabSelected?s().createElement(tt,{onSubmit:this.handleGroupByID,onError:this.props.onError}):s().createElement("div",{className:"flex-column"},s().createElement(at,{type:"p2p",onSearchContacts:this.handleSearchContacts}),s().createElement(W,{contacts:this.props.searchResults,myUserId:this.props.myUserId,emptyListMessage:t,showOnline:!1,showUnread:!1,showContextMenu:!1,onTopicSelected:this.handleContactSelected})))}}var ot=(0,n.injectIntl)(nt);class lt extends s().PureComponent{constructor(e){super(e),this.state={email:"",password:""},this.handleSubmit=this.handleSubmit.bind(this),this.handleEmailChange=this.handleEmailChange.bind(this),this.handlePasswordChange=this.handlePasswordChange.bind(this)}componentDidMount(){let e=Pe.parseUrlHash(window.location.hash);this.setState({token:e.params.token,scheme:e.params.scheme})}handleSubmit(e){e.preventDefault(),this.state.token?this.props.onReset(this.state.scheme,this.state.password.trim(),this.state.token):this.props.onRequest("email",this.state.email.trim())}handleEmailChange(e){this.setState({email:e.target.value})}handlePasswordChange(e){this.setState({password:e.target.value})}render(){let e=this.state.token&&this.state.scheme;return s().createElement("form",{id:"password-reset-form",onSubmit:this.handleSubmit},e?s().createElement(n.FormattedMessage,{id:"new_password_placeholder",defaultMessage:[{type:0,value:"Enter new password"}]},(e=>s().createElement($,{placeholder:e,autoComplete:"new-password",value:this.state.password,required:!0,autoFocus:!0,onChange:this.handlePasswordChange}))):s().createElement(s().Fragment,null,s().createElement("label",{htmlFor:"inputEmail"},s().createElement(n.FormattedMessage,{id:"label_reset_password",defaultMessage:[{type:0,value:"Send a password reset email:"}]})),s().createElement(n.FormattedMessage,{id:"credential_email_prompt",defaultMessage:[{type:0,value:"Your registration email"}]},(e=>s().createElement("input",{type:"email",id:"inputEmail",placeholder:e,autoComplete:"email",value:this.state.email,onChange:this.handleEmailChange,required:!0,autoFocus:!0})))),s().createElement("div",{className:"dialog-buttons"},s().createElement("button",{className:"blue",type:"submit"},e?s().createElement(n.FormattedMessage,{id:"button_reset",defaultMessage:[{type:0,value:"Reset"}]}):s().createElement(n.FormattedMessage,{id:"button_send_request",defaultMessage:[{type:0,value:"Send request"}]}))))}}class rt extends s().PureComponent{constructor(e){super(e),this.state={hostName:e.serverAddress,changed:!1},this.handleHostNameChange=this.handleHostNameChange.bind(this),this.handleEditingFinished=this.handleEditingFinished.bind(this)}handleHostNameChange(e){this.setState({hostName:e.target.value,changed:!0})}handleEditingFinished(){this.state.changed&&(this.setState({changed:!1}),this.props.onServerAddressChange(this.state.hostName.trim()))}render(){var e=[];for(let t in p){let a=p[t];e.push(s().createElement("option",{key:a,value:a}))}return s().createElement("div",{className:"panel-form-row"},s().createElement("input",{type:"search",id:"host-name",placeholder:this.props.hostName,list:"known-hosts",className:"quoted",value:this.state.hostName,onChange:this.handleHostNameChange,onBlur:this.handleEditingFinished,required:!0}),s().createElement("datalist",{id:"known-hosts"},e))}}class ct extends s().PureComponent{constructor(e){super(e),this.state={transport:e.transport||"def",serverAddress:e.serverAddress},this.handleSubmit=this.handleSubmit.bind(this),this.handleTransportSelected=this.handleTransportSelected.bind(this),this.handleServerAddressChange=this.handleServerAddressChange.bind(this)}handleSubmit(e){e.preventDefault(),this.props.onUpdate({transport:this.state.transport,serverAddress:this.state.serverAddress})}handleTransportSelected(e){this.setState({transport:e.currentTarget.value})}handleServerAddressChange(e){this.setState({serverAddress:e})}render(){const e={def:"default",ws:"websocket",lp:"long polling"};var t=[],a=this;return["def","ws","lp"].map((function(i){var n="transport-"+i,o=e[i];t.push(s().createElement("li",{key:i},s().createElement("input",{type:"radio",id:n,name:"transport-select",value:i,checked:a.state.transport===i,onChange:a.handleTransportSelected}),s().createElement("label",{htmlFor:n},o)))})),s().createElement("form",{id:"settings-form",className:"panel-form",onSubmit:this.handleSubmit},s().createElement("div",{className:"panel-form-row"},s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_server_to_use",defaultMessage:[{type:0,value:"Server to use:"}]}))),s().createElement(rt,{serverAddress:this.state.serverAddress,onServerAddressChange:this.handleServerAddressChange}),s().createElement("div",{className:"panel-form-row"},s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_wire_transport",defaultMessage:[{type:0,value:"Wire transport:"}]}))),s().createElement("div",{className:"panel-form-row"},s().createElement("ul",{className:"quoted"},t)),s().createElement("div",{className:"dialog-buttons"},s().createElement("button",{type:"submit",className:"blue"},s().createElement(n.FormattedMessage,{id:"button_update",defaultMessage:[{type:0,value:"Update"}]}))))}}const dt=(0,n.defineMessages)({phone:{id:"phone_dative",defaultMessage:[{type:0,value:"phone"}]},email:{id:"email_dative",defaultMessage:[{type:0,value:"email"}]}});class ht extends s().PureComponent{constructor(e){super(e),this.state={code:e.credCode||""},this.handleChange=this.handleChange.bind(this),this.handleKeyPress=this.handleKeyPress.bind(this),this.handleSubmit=this.handleSubmit.bind(this),this.handleCancel=this.handleCancel.bind(this)}handleChange(e){this.setState({code:e.target.value})}handleKeyPress(e){"Enter"===e.key?this.handleSubmit(e):"Escape"==e.key&&this.handleCancel(e)}handleSubmit(e){e.preventDefault(),this.state.code&&this.state.code.trim()&&this.props.onSubmit(this.props.credMethod,this.state.code.trim())}handleCancel(e){e.preventDefault(),this.props.onCancel()}render(){const{formatMessage:e}=this.props.intl;let t={email:e(dt.email),tel:e(dt.phone)}[this.props.credMethod]||this.props.credMethod;return s().createElement("div",{className:"panel-form"},s().createElement("div",{className:"panel-form-row"},s().createElement("label",{className:"small",htmlFor:"enter-confirmation-code"},s().createElement(n.FormattedMessage,{id:"enter_confirmation_code_prompt",defaultMessage:[{type:0,value:"Enter confirmation code sent to you by "},{type:1,value:"method"},{type:0,value:":"}],values:{method:t}}))),s().createElement("div",{className:"panel-form-row"},s().createElement(n.FormattedMessage,{id:"numeric_confirmation_code_prompt",defaultMessage:[{type:0,value:"Numbers only"}]},(e=>s().createElement("input",{type:"text",id:"enter-confirmation-code",placeholder:e,value:this.state.code,onChange:this.handleChange,onKeyPress:this.handleKeyPress,required:!0})))),s().createElement("div",{className:"dialog-buttons"},s().createElement("button",{className:"blue",onClick:this.handleSubmit},s().createElement(n.FormattedMessage,{id:"button_confirm",defaultMessage:[{type:0,value:"Confirm"}]})),s().createElement("button",{className:"white",onClick:this.handleCancel},s().createElement(n.FormattedMessage,{id:"button_cancel"}))))}}var pt=(0,n.injectIntl)(ht);const mt=(0,n.defineMessages)({login:{id:"sidepanel_title_login",defaultMessage:[{type:0,value:"Sign In"}]},register:{id:"sidepanel_title_register",defaultMessage:[{type:0,value:"Create Account"}]},settings:{id:"sidepanel_title_settings",defaultMessage:[{type:0,value:"Settings"}]},edit:{id:"sidepanel_title_account_settings",defaultMessage:[{type:0,value:"Account Settings"}]},general:{id:"sidepanel_title_acc_general",defaultMessage:[{type:0,value:"General"}]},security:{id:"sidepanel_title_acc_security",defaultMessage:[{type:0,value:"Security"}]},notif:{id:"sidepanel_title_acc_notifications",defaultMessage:[{type:0,value:"Notifications"}]},support:{id:"sidepanel_title_acc_support",defaultMessage:[{type:0,value:"Support"}]},newtpk:{id:"sidepanel_title_newtpk",defaultMessage:[{type:0,value:"Start New Chat"}]},cred:{id:"sidepanel_title_cred",defaultMessage:[{type:0,value:"Confirm Credentials"}]},reset:{id:"sidepanel_title_reset",defaultMessage:[{type:0,value:"Reset Password"}]},archive:{id:"sidepanel_title_archive",defaultMessage:[{type:0,value:"Archived Chats"}]},blocked:{id:"sidepanel_title_blocked",defaultMessage:[{type:0,value:"Blocked Chats"}]}});class ut extends s().Component{constructor(e){super(e),this.handleLoginRequested=this.handleLoginRequested.bind(this),this.handleNewTopic=this.handleNewTopic.bind(this)}handleLoginRequested(e,t){this.props.onLoginRequest(e,t)}handleNewTopic(){this.props.onBasicNavigate("newtpk")}render(){const{formatMessage:e}=this.props.intl,t=this.props.state||(this.props.myUserId?"contacts":"login");let a,i,n;return"contacts"==t?(a=this.props.title,i=!this.props.avatar||this.props.avatar):(a=e(mt[t]),i=!1),-1==["login","contacts"].indexOf(t)&&(n=this.props.onCancel),s().createElement("div",{id:"sidepanel",className:this.props.hideSelf?"nodisplay":null},s().createElement(Be,{state:t,title:a,avatar:i,myUserId:this.props.myUserId,onSignUp:this.props.onSignUp,onSettings:this.props.onSettings,onNewTopic:this.handleNewTopic,onCancel:n}),s().createElement(G,{level:this.props.errorLevel,text:this.props.errorText,action:this.props.errorAction,actionText:this.props.errorActionText,onClearError:this.props.onError}),s().createElement(Te,{show:this.props.loadSpinnerVisible}),"login"===t?s().createElement(Xe,{login:this.props.login,disabled:this.props.loginDisabled,onLogin:this.handleLoginRequested}):"register"===t?s().createElement(Ke,{onCreateAccount:this.props.onCreateAccount,onCancel:this.props.onCancel,onError:this.props.onError}):"settings"===t?s().createElement(ct,{transport:this.props.transport,serverAddress:this.props.serverAddress,onCancel:this.props.onCancel,onUpdate:this.props.onGlobalSettings}):"edit"===t?s().createElement(We,{tinode:this.props.tinode,myUserId:this.props.myUserId,onBasicNavigate:this.props.onBasicNavigate}):"general"===t?s().createElement(Ve,{tinode:this.props.tinode,myUserId:this.props.myUserId,onUpdateAccount:this.props.onUpdateAccount,onUpdateTags:this.props.onUpdateAccountTags,onCredAdd:this.props.onCredAdd,onCredDelete:this.props.onCredDelete,onCredConfirm:this.props.onCredConfirm,onBasicNavigate:this.props.onBasicNavigate,onError:this.props.onError}):"notif"===t?s().createElement(Ge,{messageSounds:this.props.messageSounds,desktopAlerts:this.props.desktopAlerts,desktopAlertsEnabled:this.props.desktopAlertsEnabled,incognitoMode:this.props.incognitoMode,onTogglePushNotifications:this.props.onTogglePushNotifications,onToggleMessageSounds:this.props.onToggleMessageSounds,onToggleIncognitoMode:this.props.onToggleIncognitoMode}):"security"===t?s().createElement(Ye,{tinode:this.props.tinode,onUpdateAccount:this.props.onUpdateAccount,onLogout:this.props.onLogout,onDeleteAccount:this.props.onDeleteAccount,onShowAlert:this.props.onShowAlert,onShowBlocked:this.props.onShowBlocked}):"support"===t?s().createElement(Ze,{serverAddress:this.props.serverAddress,serverVersion:this.props.serverVersion}):"contacts"===t||"archive"==t||"blocked"==t?s().createElement(je,{tinode:this.props.tinode,myUserId:this.props.myUserId,connected:this.props.connected,topicSelected:this.props.topicSelected,archive:"archive"==t,blocked:"blocked"==t,chatList:this.props.chatList,showContextMenu:this.props.showContextMenu,onTopicSelected:this.props.onTopicSelected,onShowArchive:this.props.onShowArchive}):"newtpk"===t?s().createElement(ot,{tinode:this.props.tinode,searchResults:this.props.searchResults,onInitFind:this.props.onInitFind,onSearchContacts:this.props.onSearchContacts,onCreateTopic:this.props.onCreateTopic,onError:this.props.onError}):"cred"===t?s().createElement(pt,{credCode:this.props.credCode,credMethod:this.props.credMethod,onSubmit:this.props.onValidateCredentials,onCancel:this.props.onCancel,onError:this.props.onError}):"reset"===t?s().createElement(lt,{onRequest:this.props.onPasswordResetRequest,onReset:this.props.onResetPassword}):null)}}var _t=(0,n.injectIntl)(ut);function gt(){let e=m;return"object"==typeof window.location&&("file:"==window.location.protocol||"localhost"==window.location.hostname?e=p.local:window.location.hostname&&(e=window.location.hostname+(window.location.port?":"+window.location.port:""))),e}function bt(){return"object"==typeof window.location&&"https:"==window.location.protocol}const vt=new Audio("audio/msg.mp3"),ft=(0,n.defineMessages)({reconnect_countdown:{id:"reconnect_countdown",defaultMessage:[{type:0,value:"Disconnected. Reconnecting in "},{type:1,value:"seconds"},{type:0,value:"…"}]},reconnect_now:{id:"reconnect_now",defaultMessage:[{type:0,value:"Try now"}]},push_init_failed:{id:"push_init_failed",defaultMessage:[{type:0,value:"Failed to initialize push notifications"}]},invalid_security_token:{id:"invalid_security_token",defaultMessage:[{type:0,value:"Invalid security token"}]},no_connection:{id:"no_connection",defaultMessage:[{type:0,value:"No connection"}]},code_doesnot_match:{id:"code_doesnot_match",defaultMessage:[{type:0,value:"Code does not match"}]}});class Et extends s().Component{constructor(e){super(e),this.state=this.getBlankState(),this.handleResize=this.handleResize.bind(this),this.handleHashRoute=this.handleHashRoute.bind(this),this.handleOnline=this.handleOnline.bind(this),this.checkForAppUpdate=this.checkForAppUpdate.bind(this),this.handleVisibilityEvent=this.handleVisibilityEvent.bind(this),this.handleError=this.handleError.bind(this),this.handleLoginRequest=this.handleLoginRequest.bind(this),this.handleConnected=this.handleConnected.bind(this),this.handleAutoreconnectIteration=this.handleAutoreconnectIteration.bind(this),this.doLogin=this.doLogin.bind(this),this.handleCredentialsRequest=this.handleCredentialsRequest.bind(this),this.handleLoginSuccessful=this.handleLoginSuccessful.bind(this),this.handleDisconnect=this.handleDisconnect.bind(this),this.tnMeMetaDesc=this.tnMeMetaDesc.bind(this),this.tnMeContactUpdate=this.tnMeContactUpdate.bind(this),this.tnMeSubsUpdated=this.tnMeSubsUpdated.bind(this),this.resetContactList=this.resetContactList.bind(this),this.tnData=this.tnData.bind(this),this.tnInitFind=this.tnInitFind.bind(this),this.tnFndSubsUpdated=this.tnFndSubsUpdated.bind(this),this.handleSearchContacts=this.handleSearchContacts.bind(this),this.handleTopicSelected=this.handleTopicSelected.bind(this),this.handleHideMessagesView=this.handleHideMessagesView.bind(this),this.handleSendMessage=this.handleSendMessage.bind(this),this.handleNewChatInvitation=this.handleNewChatInvitation.bind(this),this.handleNewAccount=this.handleNewAccount.bind(this),this.handleNewAccountRequest=this.handleNewAccountRequest.bind(this),this.handleUpdateAccountRequest=this.handleUpdateAccountRequest.bind(this),this.handleUpdateAccountTagsRequest=this.handleUpdateAccountTagsRequest.bind(this),this.handleToggleIncognitoMode=this.handleToggleIncognitoMode.bind(this),this.handleSettings=this.handleSettings.bind(this),this.handleGlobalSettings=this.handleGlobalSettings.bind(this),this.handleShowArchive=this.handleShowArchive.bind(this),this.handleShowBlocked=this.handleShowBlocked.bind(this),this.handleToggleMessageSounds=this.handleToggleMessageSounds.bind(this),this.handleCredAdd=this.handleCredAdd.bind(this),this.handleCredDelete=this.handleCredDelete.bind(this),this.handleCredConfirm=this.handleCredConfirm.bind(this),this.initDesktopAlerts=this.initDesktopAlerts.bind(this),this.togglePushToken=this.togglePushToken.bind(this),this.requestPushToken=this.requestPushToken.bind(this),this.handleSidepanelCancel=this.handleSidepanelCancel.bind(this),this.handleStartTopicRequest=this.handleStartTopicRequest.bind(this),this.handleNewTopicCreated=this.handleNewTopicCreated.bind(this),this.handleTopicUpdateRequest=this.handleTopicUpdateRequest.bind(this),this.handleChangePermissions=this.handleChangePermissions.bind(this),this.handleTagsUpdated=this.handleTagsUpdated.bind(this),this.handleLogout=this.handleLogout.bind(this),this.handleDeleteAccount=this.handleDeleteAccount.bind(this),this.handleDeleteMessagesRequest=this.handleDeleteMessagesRequest.bind(this),this.handleLeaveUnsubRequest=this.handleLeaveUnsubRequest.bind(this),this.handleBlockTopicRequest=this.handleBlockTopicRequest.bind(this),this.handleReportTopic=this.handleReportTopic.bind(this),this.handleShowContextMenu=this.handleShowContextMenu.bind(this),this.defaultTopicContextMenu=this.defaultTopicContextMenu.bind(this),this.handleHideContextMenu=this.handleHideContextMenu.bind(this),this.handleShowAlert=this.handleShowAlert.bind(this),this.handleShowInfoView=this.handleShowInfoView.bind(this),this.handleHideInfoView=this.handleHideInfoView.bind(this),this.handleMemberUpdateRequest=this.handleMemberUpdateRequest.bind(this),this.handleValidateCredentialsRequest=this.handleValidateCredentialsRequest.bind(this),this.handlePasswordResetRequest=this.handlePasswordResetRequest.bind(this),this.handleResetPassword=this.handleResetPassword.bind(this),this.handleContextMenuAction=this.handleContextMenuAction.bind(this)}getBlankState(){const e=He.getObject("settings")||{};return{connected:!1,ready:!1,autoLogin:!1,transport:e.transport||null,serverAddress:e.serverAddress||gt(),serverVersion:"no connection",messageSounds:!e.messageSoundsOff,incognitoMode:!1,desktopAlerts:e.desktopAlerts,desktopAlertsEnabled:(bt()||"object"==typeof window.location&&"localhost"==window.location.hostname)&&void 0!==l&&"undefined"!=typeof navigator&&"undefined"!=typeof FIREBASE_INIT,firebaseToken:He.getObject("firebase-token"),applicationVisible:!document.hidden,errorText:"",errorLevel:null,errorAction:void 0,errorActionText:null,sidePanelSelected:"login",sidePanelTitle:null,sidePanelAvatar:null,loadSpinnerVisible:!1,login:"",password:"",myUserId:null,liveConnection:navigator.onLine,topicSelected:"",topicSelectedOnline:!1,topicSelectedAcs:null,newTopicParams:null,loginDisabled:!1,displayMobile:window.innerWidth<=640,showInfoPanel:!1,mobilePanel:"sidepanel",contextMenuVisible:!1,contextMenuBounds:null,contextMenuClickAt:null,contextMenuParams:null,contextMenuItems:[],alertVisible:!1,alertParams:{},chatList:[],searchResults:[],searchableContacts:[],credMethod:void 0,credCode:void 0}}componentDidMount(){window.addEventListener("resize",this.handleResize),window.addEventListener("online",(e=>{this.handleOnline(!0)})),window.addEventListener("offline",(e=>{this.handleOnline(!1)})),window.addEventListener("hashchange",this.handleHashRoute),document.addEventListener("visibilitychange",this.handleVisibilityEvent),this.setState({viewportWidth:document.documentElement.clientWidth,viewportHeight:document.documentElement.clientHeight});const{formatMessage:e,locale:t}=this.props.intl;if(this.tinode=Et.tnSetup(this.state.serverAddress,this.state.transport,t),this.tinode.onConnect=this.handleConnected,this.tinode.onDisconnect=this.handleDisconnect,this.tinode.onAutoreconnectIteration=this.handleAutoreconnectIteration,this.state.desktopAlertsEnabled)try{this.fbPush=l.initializeApp(FIREBASE_INIT,h).messaging(),this.fbPush.usePublicVapidKey(FIREBASE_INIT.messagingVapidKey),navigator.serviceWorker.register("/service-worker.js").then((e=>{this.checkForAppUpdate(e),this.fbPush.useServiceWorker(e),e.active.postMessage(JSON.stringify({locale:t})),this.initDesktopAlerts(),this.state.desktopAlerts&&(this.state.firebaseToken?this.tinode.setDeviceToken(this.state.firebaseToken,!0):this.togglePushToken(!0))})).catch((e=>{console.log("Failed to register service worker:",e)}))}catch(t){this.handleError(e(ft.push_init_failed),"err"),console.log("Failed to initialize push notifications",t),this.setState({desktopAlertsEnabled:!1})}const s=He.getObject("keep-logged-in")?He.getObject("auth-token"):void 0,a=Pe.parseUrlHash(window.location.hash);s?(this.setState({autoLogin:!0}),s.expires=new Date(s.expires),this.tinode.setAuthToken(s),this.tinode.connect().catch((e=>{this.handleError(e.message,"err")})),delete a.params.info,delete a.params.tab,a.path[0]="",Pe.navigateTo(Pe.composeUrlHash(a.path,a.params))):a.params.token||Pe.navigateTo(""),this.readTimer=null,this.readTimerCallback=null,this.handleHashRoute()}componentWillUnmount(){window.removeEventListener("resize",this.handleResize),window.removeEventListener("hashchange",this.handleHashRoute),document.removeEventListener("visibilitychange",this.handleVisibilityEvent)}static tnSetup(e,t,s){const a=new(c())(h,e,"AQEAAAABAAD_rAp4DJh05a1HAwFT3A6K",t,bt());return a.setHumanLanguage(s),a.enableLogging(true,!0),a}handleResize(){const e=document.documentElement.clientWidth<=640;this.setState({viewportWidth:document.documentElement.clientWidth,viewportHeight:document.documentElement.clientHeight}),this.state.displayMobile!=e&&this.setState({displayMobile:e})}checkForAppUpdate(e){e.onupdatefound=()=>{const t=e.installing;t.onstatechange=()=>{if("installed"==t.state&&navigator.serviceWorker.controller){const e=s().createElement(s().Fragment,null,s().createElement(n.FormattedMessage,{id:"update_available",defaultMessage:[{type:0,value:"Update available."}]})," ",s().createElement("a",{href:""},s().createElement(n.FormattedMessage,{id:"reload_update",defaultMessage:[{type:0,value:"Reload"}]})),".");this.handleError(e,"info")}}}}handleHashRoute(){const e=Pe.parseUrlHash(window.location.hash);e.path&&e.path.length>0?(["register","settings","edit","notif","security","support","general","cred","reset","newtpk","archive","blocked","contacts",""].includes(e.path[0])?this.setState({sidePanelSelected:e.path[0]}):console.log("Unknown sidepanel view",e.path[0]),e.path.length>1&&e.path[1]!=this.state.topicSelected&&this.setState({topicSelected:c().topicType(e.path[1])?e.path[1]:null})):this.setState({sidePanelSelected:""}),e.params.method&&this.setState({credMethod:e.params.method}),e.params.code&&this.setState({credCode:e.params.code}),this.setState({showInfoPanel:e.params.info,newTopicTabSelected:e.params.tab})}handleOnline(e){e?this.handleError():this.handleError(this.props.intl.formatMessage(ft.no_connection),"warn"),this.setState({liveConnection:e})}handleVisibilityEvent(){this.setState({applicationVisible:!document.hidden})}handleError(e,t,s,a){this.setState({errorText:e,errorLevel:t,errorAction:s,errorActionText:a})}handleLoginRequest(e,t){this.setState({loginDisabled:!0,login:e,password:t,loadSpinnerVisible:!0,autoLogin:!0}),this.handleError("",null),this.tinode.isConnected()?this.doLogin(e,t,{meth:this.state.credMethod,resp:this.state.credCode}):this.tinode.connect().catch((e=>{this.setState({loginDisabled:!1,autoLogin:!1,loadSpinnerVisible:!1}),this.handleError(e.message,"err")}))}handleConnected(){const e=this.tinode.getServerInfo();this.setState({serverVersion:e.ver+" "+(e.build?e.build:"none")}),this.state.autoLogin&&this.doLogin(this.state.login,this.state.password,{meth:this.state.credMethod,resp:this.state.credCode})}handleAutoreconnectIteration(e,t){if(clearInterval(this.reconnectCountdown),e<0)return void this.handleError();if(t)return void t.then((()=>{this.handleError()})).catch((e=>{this.handleError(e.message,"err")}));const{formatMessage:s}=this.props.intl;let a=e/1e3;a|=a,this.reconnectCountdown=setInterval((()=>{const e=a>99?function(e){const t=Math.floor(e/60);let s=e%60;return s=s<10?"0".concat(s):s,"".concat(t,":").concat(s)}(a):a;this.handleError(s(ft.reconnect_countdown,{seconds:e}),"warn",(()=>{clearInterval(this.reconnectCountdown),this.tinode.reconnect()}),s(ft.reconnect_now)),a-=1}),1e3)}handleDisconnect(e){this.setState({connected:!1,ready:!1,topicSelectedOnline:!1,errorText:e&&e.message?e.message:"Disconnected",errorLevel:e&&e.message?"err":"warn",loginDisabled:!1,contextMenuVisible:!1,serverVersion:"no connection"})}doLogin(e,t,s){if(this.tinode.isAuthenticated())return void Pe.navigateTo("");s=c().credential(s);let a=null;const i=this.tinode.getAuthToken();e&&t?(this.setState({password:null}),a=this.tinode.loginBasic(e,t,s)):i&&(a=this.tinode.loginToken(i.token,s)),a?a.then((e=>{e.code>=300&&"validate credentials"===e.text?(this.setState({loadSpinnerVisible:!1}),s&&this.handleError(this.props.intl.formatMessage(ft.code_doesnot_match),"warn"),this.handleCredentialsRequest(e.params)):this.handleLoginSuccessful()})).catch((e=>{this.setState({loginDisabled:!1,credMethod:void 0,credCode:void 0,loadSpinnerVisible:!1,autoLogin:!1}),this.handleError(e.message,"err"),localStorage.removeItem("auth-token"),Pe.navigateTo("")})):(Pe.navigateTo(""),this.setState({loginDisabled:!1}))}handleCredentialsRequest(e){const t=Pe.parseUrlHash(window.location.hash);t.path[0]="cred",t.params.method=e.cred[0],Pe.navigateTo(Pe.composeUrlHash(t.path,t.params))}handleLoginSuccessful(){this.handleError(),He.getObject("keep-logged-in")&&He.setObject("auth-token",this.tinode.getAuthToken());const e=this.tinode.getMeTopic();e.onMetaDesc=this.tnMeMetaDesc,e.onContactUpdate=this.tnMeContactUpdate,e.onSubsUpdated=this.tnMeSubsUpdated,this.setState({connected:!0,credMethod:void 0,credCode:void 0,myUserId:this.tinode.getCurrentUserID(),autoLogin:!0}),e.subscribe(e.startMetaQuery().withLaterSub().withDesc().withTags().withCred().build()).catch((e=>{this.tinode.disconnect(),localStorage.removeItem("auth-token"),this.handleError(e.message,"err"),Pe.navigateTo("")})).finally((()=>{this.setState({loadSpinnerVisible:!1})})),Pe.navigateTo(Pe.setUrlSidePanel(window.location.hash,"contacts"))}tnMeMetaDesc(e){e&&(e.public&&this.setState({sidePanelTitle:e.public.fn,sidePanelAvatar:P(e.public.photo)}),e.acs&&this.setState({incognitoMode:!e.acs.isPresencer()}))}tnMeContactUpdate(e,t){if("on"==e||"off"==e)this.resetContactList(),this.state.topicSelected==t.topic&&this.setState({topicSelectedOnline:"on"==e});else if("read"==e)this.resetContactList();else if("msg"==e){const e=this.tinode.getTopic(t.topic),s=e&&e.isArchived();t.unread>0&&this.state.messageSounds&&!s&&(document.hidden||this.state.topicSelected!=t.topic)&&vt.play(),this.resetContactList()}else"recv"==e||("gone"==e||"unsub"==e?(this.state.topicSelected==t.topic&&this.handleTopicSelected(null),this.resetContactList()):"acs"==e?this.state.topicSelected==t.topic&&this.setState({topicSelectedAcs:t.acs}):"del"==e||"upd"==e||console.log("Unsupported (yet) presence update:"+e+" in: "+t.topic))}tnMeSubsUpdated(e){this.resetContactList()}static prepareSearchableContacts(e,t){const s={};for(const t of e)c().isP2PTopicName(t.topic)&&(s[t.topic]={user:t.topic,updated:t.updated,public:t.public,private:t.private,acs:t.acs});for(const e of t)s[e.user]||(s[e.user]=e);return Object.values(s)}resetContactList(){const e={chatList:[]};this.state.ready||(e.ready=!0),this.tinode.getMeTopic().contacts((t=>{e.chatList.push(t),this.state.topicSelected==t.topic&&(e.topicSelectedOnline=t.online,e.topicSelectedAcs=t.acs)})),e.searchableContacts=Et.prepareSearchableContacts(e.chatList,this.state.searchResults),this.setState(e)}tnData(e){const t=this.tinode.getTopic(e.topic);t.msgStatus(e)>=c().MESSAGE_STATUS_SENT&&e.from!=this.state.myUserId&&(clearTimeout(this.receivedTimer),this.receivedTimer=setTimeout((()=>{this.receivedTimer=void 0,t.noteRecv(e.seq)}),500))}tnInitFind(){const e=this.tinode.getFndTopic();e.onSubsUpdated=this.tnFndSubsUpdated,e.isSubscribed()?this.tnFndSubsUpdated():e.subscribe(e.startMetaQuery().withSub().build()).catch((e=>{this.handleError(e.message,"err")}))}tnFndSubsUpdated(){const e=[];this.tinode.getFndTopic().contacts((t=>{e.push(t)})),this.setState({searchResults:e,searchableContacts:Et.prepareSearchableContacts(this.state.chatList,e)})}handleSearchContacts(e){const t=this.tinode.getFndTopic();t.setMeta({desc:{public:e}}).then((e=>t.getMeta(t.startMetaQuery().withSub().build()))).catch((e=>{this.handleError(e.message,"err")}))}handleTopicSelected(e){this.state.newTopicParams&&this.state.newTopicParams._topicName!=e&&this.setState({newTopicParams:null}),e?(this.setState({errorText:"",errorLevel:null,mobilePanel:"topic-view",showInfoPanel:!1}),this.state.topicSelected!=e&&(this.setState({topicSelectedOnline:this.tinode.isTopicOnline(e),topicSelectedAcs:this.tinode.getTopicAccessMode(e)}),Pe.navigateTo(Pe.setUrlTopic("",e)))):(this.setState({errorText:"",errorLevel:null,mobilePanel:"sidepanel",topicSelectedOnline:!1,topicSelectedAcs:null,showInfoPanel:!1}),Pe.navigateTo(Pe.setUrlTopic("",null)))}handleHideMessagesView(){this.setState({mobilePanel:"sidepanel"}),Pe.navigateTo(Pe.setUrlTopic(window.location.hash,null))}handleSendMessage(e,t,s){const a=this.tinode.getTopic(this.state.topicSelected);(e=a.createMessage(e,!1))._uploader=s,a.isSubscribed()||(t||(t=Promise.resolve()),t=t.then((()=>a.subscribe()))),t&&(t=t.catch((e=>{this.handleError(e.message,"err")}))),a.publishDraft(e,t).then((e=>{if(a.isArchived())return a.archive(!1)})).catch((e=>{this.handleError(e.message,"err")}))}handleNewChatInvitation(e,t){const s=this.tinode.getTopic(e);let a=null;switch(t){case"accept":const i=s.getAccessMode().getGiven();a=s.setMeta({sub:{mode:i}}),s.isP2P()&&(a=a.then((t=>{s.setMeta({sub:{user:e,mode:i}})})));break;case"delete":a=s.delTopic(!0);break;case"block":const n=s.getAccessMode().updateWant("-JP").getWant();a=s.setMeta({sub:{mode:n}}).then((e=>this.handleTopicSelected(null)));break;default:console.log("Unknown invitation action",'"'+t+'""')}null!=a&&a.catch((e=>{this.handleError(e.message,"err")}))}handleNewAccount(){this.handleError(),Pe.navigateTo(Pe.setUrlSidePanel(window.location.hash,"register"))}handleNewAccountRequest(e,t,s,a,i){this.handleError(),this.tinode.connect(this.state.serverAddress).then((()=>this.tinode.createAccountBasic(e,t,{public:s,tags:i,cred:c().credential(a)}))).then((e=>{e.code>=300&&"validate credentials"==e.text?this.handleCredentialsRequest(e.params):this.handleLoginSuccessful(this)})).catch((e=>{this.handleError(e.message,"err")}))}handleUpdateAccountRequest(e,t,s){if(this.handleError(),t||s){const e={};t&&(e.public=t),s&&(e.defacs=s),this.tinode.getMeTopic().setMeta({desc:e}).catch((e=>{this.handleError(e.message,"err")}))}e&&this.tinode.updateAccountBasic(null,this.tinode.getCurrentLogin(),e).catch((e=>{this.handleError(e.message,"err")}))}handleToggleIncognitoMode(e){const t=this.tinode.getMeTopic(),s=t.getAccessMode().updateWant(e?"-P":"+P").getWant();t.setMeta({sub:{mode:s}}).catch((e=>{this.handleError(e.message,"err")}))}handleUpdateAccountTagsRequest(e){this.tinode.getMeTopic().setMeta({tags:e}).catch((e=>{this.handleError(e.message,"err")}))}handleSettings(){this.handleError(),Pe.navigateTo(Pe.setUrlSidePanel(window.location.hash,this.state.myUserId?"edit":"settings"))}handleGlobalSettings(e){const t=e.serverAddress||this.state.serverAddress,s=e.transport||this.state.transport;this.tinode&&(this.tinode.onDisconnect=void 0,this.tinode.disconnect()),this.tinode=Et.tnSetup(t,s,this.props.intl.locale),this.tinode.onConnect=this.handleConnected,this.tinode.onDisconnect=this.handleDisconnect,this.setState({serverAddress:t,transport:s}),He.setObject("settings",{serverAddress:t,transport:s}),Pe.navigateTo(Pe.setUrlSidePanel(window.location.hash,""))}handleShowArchive(){Pe.navigateTo(Pe.setUrlSidePanel(window.location.hash,this.state.myUserId?"archive":""))}handleShowBlocked(){Pe.navigateTo(Pe.setUrlSidePanel(window.location.hash,this.state.myUserId?"blocked":""))}initDesktopAlerts(){this.fbPush.onTokenRefresh((()=>{this.requestPushToken()})),this.fbPush.onMessage((e=>{}))}togglePushToken(e){e?this.state.firebaseToken?(this.setState({desktopAlerts:!0}),He.updateObject("settings",{desktopAlerts:!0})):this.fbPush.requestPermission().then((()=>{this.requestPushToken()})).catch((e=>{this.handleError(e.message,"err"),this.setState({desktopAlerts:!1,firebaseToken:null}),He.updateObject("settings",{desktopAlerts:!1}),console.log("Failed to get permission to notify.",e)})):this.state.firebaseToken?this.fbPush.deleteToken(this.state.firebaseToken).catch((e=>{console.log("Unable to delete token.",e)})).finally((()=>{He.updateObject("settings",{desktopAlerts:!1}),localStorage.removeItem("firebase-token"),this.setState({desktopAlerts:!1,firebaseToken:null})})):(this.setState({desktopAlerts:!1,firebaseToken:null}),He.updateObject("settings",{desktopAlerts:!1}))}requestPushToken(){this.fbPush.getToken().then((e=>{e!=this.state.firebaseToken&&(this.tinode.setDeviceToken(e,!0),He.setObject("firebase-token",e)),this.setState({firebaseToken:e,desktopAlerts:!0}),He.updateObject("settings",{desktopAlerts:!0})})).catch((e=>{this.handleError(e.message,"err"),console.log("Failed to retrieve firebase token",e)}))}handleToggleMessageSounds(e){this.setState({messageSounds:e}),He.updateObject("settings",{messageSoundsOff:!e})}handleCredAdd(e,t){this.tinode.getMeTopic().setMeta({cred:{meth:e,val:t}}).catch((e=>{this.handleError(e.message,"err")}))}handleCredDelete(e,t){this.tinode.getMeTopic().delCredential(e,t).catch((e=>{this.handleError(e.message,"err")}))}handleCredConfirm(e,t){this.handleCredentialsRequest({cred:[e]})}handleSidepanelCancel(){const e=Pe.parseUrlHash(window.location.hash);let t="";["security","support","general","notif"].includes(e.path[0])?t="edit":"blocked"==e.path[0]?t="security":this.state.myUserId&&(t="contacts"),e.path[0]=t,e.params&&(delete e.params.code,delete e.params.method,delete e.params.tab),Pe.navigateTo(Pe.composeUrlHash(e.path,e.params)),this.setState({errorText:"",errorLevel:null})}basicNavigator(e){Pe.navigateTo(Pe.setUrlSidePanel(window.location.hash,e))}handleStartTopicRequest(e,t,s,a,i){if(e&&this.tinode.isTopicCached(e))return void this.handleTopicSelected(e);const n={};c().isP2PTopicName(e)?(n.sub={mode:_},n.desc={defacs:{auth:_}}):(e=e||this.tinode.newGroupTopicName(i),n.desc={public:t,private:{comment:s}},n.tags=a),n._topicName=e,this.setState({newTopicParams:n},(()=>{this.handleTopicSelected(e)}))}handleNewTopicCreated(e,t){this.state.topicSelected==e&&e!=t&&this.setState({topicSelected:t},(()=>{Pe.navigateTo(Pe.setUrlTopic("",t))}))}handleTopicUpdateRequest(e,t,s,a){const i=this.tinode.getTopic(e);if(i){const e={};t&&(e.public=t),s&&(e.private=s===c().DEL_CHAR?c().DEL_CHAR:{comment:s}),a&&(e.defacs=a),i.setMeta({desc:e}).catch((e=>{this.handleError(e.message,"err")}))}}handleChangePermissions(e,t,s){const a=this.tinode.getTopic(e);if(a){const e=a.getAccessMode();s?(e.updateGiven(t),t=e.getGiven()):(e.updateWant(t),t=e.getWant()),a.setMeta({sub:{user:s,mode:t}}).catch((e=>{this.handleError(e.message,"err")}))}}handleTagsUpdated(e,t){const s=this.tinode.getTopic(e);s&&s.setMeta({tags:t}).catch((e=>{this.handleError(e.message,"err")}))}handleLogout(){ne(0),localStorage.removeItem("auth-token"),localStorage.removeItem("firebase-token"),localStorage.removeItem("settings"),this.state.firebaseToken&&this.fbPush.deleteToken(this.state.firebaseToken),this.tinode&&(this.tinode.onDisconnect=void 0,this.tinode.disconnect()),this.setState(this.getBlankState()),this.tinode=Et.tnSetup(this.state.serverAddress,this.state.transport,this.props.intl.locale),this.tinode.onConnect=this.handleConnected,this.tinode.onDisconnect=this.handleDisconnect,Pe.navigateTo("")}handleDeleteAccount(){this.tinode.delCurrentUser(!0).then((e=>{this.handleLogout()}))}handleDeleteMessagesRequest(e){const t=this.tinode.getTopic(e);t&&t.delMessagesAll(!0).catch((e=>{this.handleError(e.message,"err")}))}handleLeaveUnsubRequest(e){const t=this.tinode.getTopic(e);t&&t.leave(!0).then((e=>{Pe.navigateTo(Pe.setUrlTopic(window.location.hash,""))})).catch((e=>{this.handleError(e.message,"err")}))}handleBlockTopicRequest(e){const t=this.tinode.getTopic(e);t&&t.updateMode(null,"-JP").then((e=>{Pe.navigateTo(Pe.setUrlTopic(window.location.hash,""))})).catch((e=>{this.handleError(e.message,"err")}))}handleReportTopic(e){const t=this.tinode.getTopic(e);t&&(this.tinode.publish(c().TOPIC_SYS,c().Drafty.attachJSON(null,{action:"report",target:e})),t.updateMode(null,"-JP").then((e=>{Pe.navigateTo(Pe.setUrlTopic(window.location.hash,""))})).catch((e=>{this.handleError(e.message,"err")})))}handleShowContextMenu(e,t){this.setState({contextMenuVisible:!0,contextMenuClickAt:{x:e.x,y:e.y},contextMenuParams:e,contextMenuItems:t||this.defaultTopicContextMenu(e.topicName),contextMenuBounds:i().findDOMNode(this).getBoundingClientRect()})}defaultTopicContextMenu(e){const t=this.tinode.getTopic(e);let s=!1,a=!1,i=!1,n=!1,o=!1,l=!1;if(t){n=t.isSubscribed(),l=t.isArchived();const e=t.getAccessMode();e&&(s=e.isMuted(),a=!e.isJoiner(),i=!e.isJoiner("want"),o=e.isDeleter())}return[n?{title:this.props.intl.formatMessage({id:"menu_item_info"}),handler:this.handleShowInfoView}:null,n?"messages_clear":null,n&&o?"messages_clear_hard":null,s?a?null:"topic_unmute":"topic_mute",i?"topic_unblock":"topic_block",l?null:"topic_archive","topic_delete"]}handleHideContextMenu(){this.setState({contextMenuVisible:!1,contextMenuClickAt:null,contextMenuParams:null,contextMenuBounds:null})}handleContextMenuAction(e,t,s){"topic_archive"==e&&t&&s.topicName&&s.topicName==this.state.topicSelected&&t.then((()=>{this.handleTopicSelected(null)}))}handleShowAlert(e,t,s,a,i,n){this.setState({alertVisible:!0,alertParams:{title:e,content:t,onConfirm:s,confirm:a,onReject:i,reject:n}})}handleShowInfoView(){Pe.navigateTo(Pe.addUrlParam(window.location.hash,"info",!0)),this.setState({showInfoPanel:!0})}handleHideInfoView(){Pe.navigateTo(Pe.removeUrlParam(window.location.hash,"info")),this.setState({showInfoPanel:!1})}handleMemberUpdateRequest(e,t,s){if(!e)return;const a=this.tinode.getTopic(e);a&&(t&&t.length>0&&t.map((e=>{a.invite(e,null).catch((e=>{this.handleError(e.message,"err")}))})),s&&s.length>0&&s.map((e=>{a.delSubscription(e).catch((e=>{this.handleError(e.message,"err")}))})))}handleValidateCredentialsRequest(e,t){if(this.tinode.isAuthenticated()){this.tinode.getMeTopic().setMeta({cred:{meth:e,resp:t}}).then((()=>{Pe.navigateTo("")})).catch((e=>{this.handleError(e.message,"err")}))}else this.setState({credMethod:e,credCode:t}),this.doLogin(null,null,{meth:e,resp:t})}handlePasswordResetRequest(e,t){this.tinode.connect().then((()=>this.tinode.requestResetAuthSecret("basic",e,t))).catch((e=>{this.handleError(e.message,"err")}))}handleResetPassword(e,t,s){(s=function(e){if(e){e=e.replace(/-/g,"+").replace(/_/g,"/");try{e=btoa(atob(e))}catch(t){console.log("Failed to base64 re-encode string.",t),e=null}}return e}(s))?this.tinode.connect().then((()=>this.tinode.updateAccountBasic(null,null,t,{token:s}))).catch((e=>{this.handleError(e.message,"err")})):this.handleError(this.props.intl.formatMessage(ft.invalid_security_token),"err")}render(){return s().createElement("div",{id:"app-container"},this.state.contextMenuVisible?s().createElement(M,{tinode:this.tinode,bounds:this.state.contextMenuBounds,clickAt:this.state.contextMenuClickAt,params:this.state.contextMenuParams,items:this.state.contextMenuItems,hide:this.handleHideContextMenu,onShowAlert:this.handleShowAlert,onAction:this.handleContextMenuAction,onTopicRemoved:e=>{e==this.state.topicSelected&&this.handleTopicSelected(null)},onError:this.handleError}):null,s().createElement(d,{visible:this.state.alertVisible,title:this.state.alertParams.title,content:this.state.alertParams.content,onReject:this.state.alertParams.onReject?()=>{this.setState({alertVisible:!1})}:null,reject:this.state.alertParams.reject,onConfirm:()=>{this.setState({alertVisible:!1}),this.state.alertParams.onConfirm()},confirm:this.state.alertParams.confirm}),s().createElement(_t,{tinode:this.tinode,connected:this.state.connected,displayMobile:this.state.displayMobile,hideSelf:this.state.displayMobile&&"sidepanel"!==this.state.mobilePanel,state:this.state.sidePanelSelected,title:this.state.sidePanelTitle,avatar:this.state.sidePanelAvatar,login:this.state.login,myUserId:this.state.myUserId,loginDisabled:this.state.loginDisabled,loadSpinnerVisible:this.state.loadSpinnerVisible,errorText:this.state.errorText,errorLevel:this.state.errorLevel,errorAction:this.state.errorAction,errorActionText:this.state.errorActionText,topicSelected:this.state.topicSelected,chatList:this.state.chatList,credMethod:this.state.credMethod,credCode:this.state.credCode,transport:this.state.transport,messageSounds:this.state.messageSounds,desktopAlerts:this.state.desktopAlerts,desktopAlertsEnabled:this.state.desktopAlertsEnabled,incognitoMode:this.state.incognitoMode,serverAddress:this.state.serverAddress,serverVersion:this.state.serverVersion,onGlobalSettings:this.handleGlobalSettings,onSignUp:this.handleNewAccount,onSettings:this.handleSettings,onBasicNavigate:this.basicNavigator,onLoginRequest:this.handleLoginRequest,onCreateAccount:this.handleNewAccountRequest,onUpdateAccount:this.handleUpdateAccountRequest,onUpdateAccountTags:this.handleUpdateAccountTagsRequest,onTogglePushNotifications:this.togglePushToken,onToggleMessageSounds:this.handleToggleMessageSounds,onToggleIncognitoMode:this.handleToggleIncognitoMode,onCredAdd:this.handleCredAdd,onCredDelete:this.handleCredDelete,onCredConfirm:this.handleCredConfirm,onTopicSelected:this.handleTopicSelected,onCreateTopic:this.handleStartTopicRequest,onLogout:this.handleLogout,onDeleteAccount:this.handleDeleteAccount,onShowAlert:this.handleShowAlert,onCancel:this.handleSidepanelCancel,onError:this.handleError,onValidateCredentials:this.handleValidateCredentialsRequest,onPasswordResetRequest:this.handlePasswordResetRequest,onResetPassword:this.handleResetPassword,onShowArchive:this.handleShowArchive,onShowBlocked:this.handleShowBlocked,onInitFind:this.tnInitFind,searchResults:this.state.searchResults,onSearchContacts:this.handleSearchContacts,showContextMenu:this.handleShowContextMenu}),s().createElement(Re,{tinode:this.tinode,connected:this.state.connected,ready:this.state.ready,online:this.state.topicSelectedOnline,acs:this.state.topicSelectedAcs,displayMobile:this.state.displayMobile,viewportWidth:this.state.viewportWidth,viewportHeight:this.state.viewportHeight,hideSelf:this.state.displayMobile&&("topic-view"!==this.state.mobilePanel||this.state.showInfoPanel),topic:this.state.topicSelected,myUserId:this.state.myUserId,serverVersion:this.state.serverVersion,serverAddress:this.state.serverAddress,applicationVisible:this.state.applicationVisible,errorText:this.state.errorText,errorLevel:this.state.errorLevel,errorAction:this.state.errorAction,errorActionText:this.state.errorActionText,newTopicParams:this.state.newTopicParams,onHideMessagesView:this.handleHideMessagesView,onData:this.tnData,onError:this.handleError,onNewTopicCreated:this.handleNewTopicCreated,showContextMenu:this.handleShowContextMenu,onChangePermissions:this.handleChangePermissions,onNewChat:this.handleNewChatInvitation,sendMessage:this.handleSendMessage}),this.state.showInfoPanel?s().createElement(pe,{tinode:this.tinode,connected:this.state.connected,displayMobile:this.state.displayMobile,topic:this.state.topicSelected,searchableContacts:this.state.searchableContacts,myUserId:this.state.myUserId,errorText:this.state.errorText,errorLevel:this.state.errorLevel,errorAction:this.state.errorAction,errorActionText:this.state.errorActionText,onTopicDescUpdate:this.handleTopicUpdateRequest,onCancel:this.handleHideInfoView,onShowAlert:this.handleShowAlert,onChangePermissions:this.handleChangePermissions,onMemberUpdateRequest:this.handleMemberUpdateRequest,onDeleteMessages:this.handleDeleteMessagesRequest,onLeaveTopic:this.handleLeaveUnsubRequest,onBlockTopic:this.handleBlockTopicRequest,onReportTopic:this.handleReportTopic,onAddMember:this.handleManageGroupMembers,onTopicTagsUpdate:this.handleTagsUpdated,onInitFind:this.tnInitFind,onError:this.handleError,showContextMenu:this.handleShowContextMenu}):null)}}var wt=(0,n.injectIntl)(Et);const{params:Ct}=Pe.parseUrlHash(window.location.hash),St=Ct&&Ct.hl||navigator.languages&&navigator.languages[0]||navigator.language||navigator.userLanguage||"en",Mt=St.toLowerCase().split(/[-_]/)[0],yt=o[St]||o[Mt]||o.en;i().render(s().createElement(n.IntlProvider,{locale:St,messages:yt,textComponent:s().Fragment},s().createElement(wt,null)),document.getElementById("mountPoint"))}();
+!function(){"use strict";var e={n:function(t){var s=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(s,{a:s}),s},d:function(t,s){for(var a in s)e.o(s,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:s[a]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t=React,s=e.n(t),a=ReactDOM,i=e.n(a),n=ReactIntl,o=JSON.parse('{"de":{"validate_credential_action":"bestätigen","title_tag_manager":"Schlagworte (Nutzer entdecken)","label_user_contacts":"Kontakte:","button_add_another":"Hinzufügen","label_message_sound":"Benachrichtigungston:","label_push_notifications":"Benachrichtigungsmeldungen:","label_push_notifications_disabled":"Benachrichtigungsmeldungen (erfordert HTTPS):","label_incognito_mode":"inkognito-Modus:","delete_account":"Konto löschen","delete_account_arning":"Möchten Sie das Konto wirklich löschen? Das kann nicht rückgängig gemacht werden","label_password":"Passwort","password_unchanged_prompt":"unverändert","button_logout":"Abmelden","button_delete_account":"Konto löschen","label_default_access_mode":"Standard Zugriffsmodus:","blocked_contacts_link":"Blockierte Kontakte ({count})","link_contact_us":"Kontakt","link_terms_of_service":"Nutzungsbedingungen","link_privacy_policy":"Datenschutzerklärung","label_sdk":"SDK:","label_server_address":"Server Adresse:","archived_contacts":"Archivierte Kontakte ({count})","contacts_not_found":"Sie haben keine Unterhaltungen
¯∖_(ツ)_/¯","full_name_prompt":"Vollständiger Name, z.B. Lisa Musterfrau","email_prompt":"E-Mail, z.B. lisam@beispiel.de","button_sign_up":"Anmelden","label_your_name":"Ihr Name","label_user_id":"ID:","button_edit":"Bearbeiten","requested_permissions":"Angefordert","granted_permissions":"Erteilt","menu_item_edit_permissions":"Berechtigungen ändern","label_other_user":"Andere","action_clear_messages":"Nachrichten leeren","clear_messages_warning":"Sind Sie sicher, dass Sie diese Unterhaltung für alle leeren wollen? Das kann nicht rückgängig gemacht werden.","action_delete_messages":"Nachrichten für alle löschen","delete_messages_warning":"Sind Sie sicher, dass Sie diese Unterhaltung für alle löschen wollen? Das kann nicht rückgängig gemacht werden.","action_leave_chat":"Unterhaltung verlassen","leave_chat_warning":"Möchten Sie diese Unterhaltung wirklich verlassen?","action_block_contact":"Kontakt blockieren","block_contact_warning":"Möchten Sie diesen Kontakt wirklich blockieren?","action_report_chat":"Unterhaltung melden","report_chat_warning":"Möchten Sie diese Unterhaltung wirklich blockieren und melden?","title_info":"Info","label_topic_name":"Name","label_private":"Privater Kommentar","private_editing_placeholder":"Nur für Sie sichtbar","label_muting_topic":"Stumm geschaltet:","action_more":"Mehr","label_your_permissions":"Ihre Berechtigungen:","label_permissions":"Berechtigungen:","label_you":"Sie:","label_default_access":"Standard Zugriffsmodus:","label_group_members":"Gruppenmitglieder:","button_add_members":"Mitglieder hinzufügen","group_has_no_members":"Keine Mitglieder","login_prompt":"Anmelden","password_prompt":"Passwort","stay_logged_in":"Angemeldet bleiben","forgot_password_link":"Passwort vergessen?","button_sign_in":"Anmelden","label_client":"Client:","label_server":"Server:","online_now":"jetzt online","last_seen_timestamp":"Zuletzt gesehen","title_not_found":"Nicht gefunden","unnamed_topic":"Unbenannt","messages_not_readable":"Neue Nachrichten können nicht gelesen werden","peers_messaging_disabled":"Gruppennachrichten sind deaktiviert","enable_peers_messaging":"Aktivieren","search_for_contacts":"Nutzen Sie die Suche um Kontakte zu finden","search_no_results":"Die Suche hatte keine Ergebnisse","tabtitle_find_user":"Suchen","tabtitle_new_group":"Neue Gruppe","tabtitle_group_by_id":"nach ID","new_password_placeholder":"Geben Sie ein neues Passwort ein","label_reset_password":"Passwort per E-Mail wiederherstellen:","credential_email_prompt":"E-Mail Adresse für Registrierung","button_reset":"Zurücksetzen","button_send_request":"Anfrage senden","label_server_to_use":"Server verwenden:","label_wire_transport":"Übertragung per Kabel:","button_update":"Aktualisieren","sidepanel_title_login":"Anmelden","sidepanel_title_register":"Konto erstellen","sidepanel_title_settings":"Einstellungen","sidepanel_title_account_settings":"Konto-Einstellungen","sidepanel_title_acc_general":"Allgemein","sidepanel_title_acc_security":"Sicherheit","sidepanel_title_acc_notifications":"Benachrichtigungen","sidepanel_title_acc_support":"Unterstützung","sidepanel_title_newtpk":"Neue Unterhaltung starten","sidepanel_title_cred":"Anmeldeinformationen bestätigen","sidepanel_title_reset":"Passwort zurücksetzen","sidepanel_title_archive":"Archivierte Unterhaltungen","sidepanel_title_blocked":"Blockierte Unterhaltungen","reconnect_countdown":"Getrennt. Wiederverbinden in {seconds}…","reconnect_now":"Jetzt probieren","push_init_failed":"Initialisierung von Push-Benachrichtigungen fehlgeschlagen","invalid_security_token":"Ungültiger Sicherheitsschlüssel","no_connection":"Keine Verbindung","code_doesnot_match":"Code stimmt nicht überein","update_available":"Aktualisierung verfügbar.","reload_update":"Neu laden","phone_dative":"Telefon","email_dative":"E-Mail","enter_confirmation_code_prompt":"Geben Sie den Bestätigungscode ein, der per {method} geschickt wurde:","numeric_confirmation_code_prompt":"Nur zahlen","button_confirm":"Bestätigen","save_attachment":"Speichern","deleted_content":"Inhalt gelöscht","invalid_content":"ungültiger Inhalt","user_not_found":"Nicht gefunden","badge_you":"Sie","badge_owner":"Besitzer","menu_item_info":"Info","menu_item_clear_messages":"Nachrichten leeren","menu_item_clear_messages_for_all":"Für alle leeren","menu_item_delete":"Löschen","menu_item_delete_for_all":"Für alle löschen","menu_item_send_retry":"Wiederholen","menu_item_mute":"Unterhaltung stumm schalten","menu_item_unmute":"Stumm schalten beenden","menu_item_delete_topic":"Entfernen","topic_delete_warning":"Möchten Sie diese Unterhaltung wirklich löschen?","menu_item_unblock":"Blockierung aufheben","menu_item_block":"Blockieren","topic_block_warning":"Möchten Sie diese Unterhaltung wirklich blockieren?","menu_item_member_delete":"Entfernen","menu_item_archive_topic":"Archivieren","action_cancel":"Abbrechen","upload_finishing":"wird abgeschlossen...","no_contacts":"Sie haben keine Kontakte :-(","contacts_not_found_short":"Keine Kontakte für \'\'{query}\'\'","title_group_members":"Gruppenmitglieder","title_all_contacts":"Alle Kontakte","button_ok":"OK","button_cancel":"Abbrechen","more_online_members":"+{overflow} mehr","download_action":"herunterladen","label_file_name":"Dateiname:","label_content_type":"Inhaltsart:","label_size":"Größe:","chat_invitation":"Sie sind eingeladen, an einem neuen Chat teilzunehmen. Was möchten Sie tun?","chat_invitation_accept":"Akzeptieren","chat_invitation_ignore":"Ignorieren","chat_invitation_block":"Blockieren","error_invalid_id":"ungültige ID","group_user_id_prompt":"Gruppe oder Benutzer ID","button_subscribe":"Abbonieren","topic_name_editing_placeholder":"Freiform Name der Gruppe","button_create":"Erstellen","permission_join":"Beitreten ({val})","permission_read":"Lesen ({val})","permission_write":"Schreiben ({val})","permission_pres":"Benachrichtigt werden ({val})","permission_admin":"Bestätigen ({val})","permission_share":"Teilen ({val})","permission_delete":"Entfernen ({val})","permission_owner":"Besitzer ({val})","title_permissions":"Berechtigungen","message_sending":"wird gesendet...","message_sending_failed":"fehlgeschlagen","search_placeholder":"Liste: email:lisa@beispiel.de, tel:17025550003...","messaging_disabled_prompt":"Nachrichtenübermittlung deaktiviert","new_message_prompt":"Neue Nachricht","image_caption_prompt":"Bildunterschrift","file_attachment_too_large":"Die Dateigröße {size} überschreitet das Limit von {limit}.","cannot_initiate_file_upload":"Datei kann nicht hochgeladen werden.","tags_not_found":"Keine Schlagworte definiert. Erstellen Sie welche.","tags_editor_no_tags":"Schlagworte hinzufügen","title_manage_tags":"Verwalten","channel_prompt":"Dies ist ein Sender","channel":"Sender"},"en":{"action_block_contact":"Block Contact","action_cancel":"cancel","action_clear_messages":"Clear Messages","action_delete_messages":"Clear Messages for All","action_leave_chat":"Leave Conversation","action_more":"More","action_report_chat":"Report Conversation","archived_contacts":"Archived contacts ({count})","badge_owner":"owner","badge_you":"you","block_contact_warning":"Are you sure you want to block this contact?","blocked_contacts_link":"Blocked contacts ({count})","button_add_another":"Add another","button_add_members":"Add members","button_cancel":"Cancel","button_confirm":"Confirm","button_create":"Create","button_delete_account":"Delete account","button_edit":"Edit","button_logout":"Logout","button_ok":"OK","button_reset":"Reset","button_send_request":"Send request","button_sign_in":"Sign in","button_sign_up":"Sign up","button_subscribe":"Subscribe","button_update":"Update","cannot_initiate_file_upload":"Cannot initiate file upload.","channel":"channel","channel_prompt":"This is a channel","chat_invitation":"You are invited to start a new chat. What would you like to do?","chat_invitation_accept":"Accept","chat_invitation_block":"Block","chat_invitation_ignore":"Ignore","clear_messages_warning":"Are you sure you want to clear all messages? It cannot be undone.","code_doesnot_match":"Code does not match","contacts_not_found":"You have no chats
¯∖_(ツ)_/¯","contacts_not_found_short":"No contacts match \'\'{query}\'\'","credential_email_prompt":"Your registration email","delete_account":"Delete account","delete_account_arning":"Are you sure you want to delete your account? It cannot be undone.","delete_messages_warning":"Are you sure you want to delete all messages for everyone? It cannot be undone.","deleted_content":"content deleted","download_action":"download","email_dative":"email","email_prompt":"Email, e.g. jdoe@example.com","enable_peers_messaging":"Enable","enter_confirmation_code_prompt":"Enter confirmation code sent to you by {method}:","error_invalid_id":"Invalid ID","file_attachment_too_large":"The file size {size} exceeds the {limit} limit.","forgot_password_link":"Forgot password?","full_name_prompt":"Full name, e.g. John Doe","granted_permissions":"Granted","group_has_no_members":"No members","group_user_id_prompt":"Group or User ID","image_caption_prompt":"Image caption","invalid_content":"invalid content","invalid_security_token":"Invalid security token","label_client":"Client:","label_content_type":"Content type:","label_default_access":"Default access mode:","label_default_access_mode":"Default access mode:","label_file_name":"File name:","label_group_members":"Group members:","label_incognito_mode":"Incognito mode:","label_message_sound":"Message sound:","label_muting_topic":"Muted:","label_other_user":"Other","label_password":"Password","label_permissions":"Permissions:","label_private":"Private comment","label_push_notifications":"Notification alerts:","label_push_notifications_disabled":"Notification alerts (requires HTTPS):","label_reset_password":"Send a password reset email:","label_sdk":"SDK:","label_server":"Server:","label_server_address":"Server address:","label_server_to_use":"Server to use:","label_size":"Size:","label_topic_name":"Name","label_user_contacts":"Contacts:","label_user_id":"ID:","label_wire_transport":"Wire transport:","label_you":"You:","label_your_name":"Your name","label_your_permissions":"Your permissions:","last_seen_timestamp":"Last seen","leave_chat_warning":"Are you sure you want to leave this conversation?","link_contact_us":"Contact Us","link_privacy_policy":"Privacy Policy","link_terms_of_service":"Terms of Service","login_prompt":"Login","menu_item_archive_topic":"Archive","menu_item_block":"Block","menu_item_clear_messages":"Clear messages","menu_item_clear_messages_for_all":"Clear for All","menu_item_delete":"Delete","menu_item_delete_for_all":"Delete for All","menu_item_delete_topic":"Delete","menu_item_edit_permissions":"Edit permissions","menu_item_info":"Info","menu_item_member_delete":"Remove","menu_item_mute":"Mute","menu_item_send_retry":"Retry","menu_item_unblock":"Unblock","menu_item_unmute":"Unmute","message_sending":"sending...","message_sending_failed":"failed","messages_not_readable":"no access to messages","messaging_disabled_prompt":"Messaging disabled","more_online_members":"+{overflow} more","new_message_prompt":"New message","new_password_placeholder":"Enter new password","no_connection":"No connection","no_contacts":"You have no contacts :-(","numeric_confirmation_code_prompt":"Numbers only","online_now":"online now","password_prompt":"Password","password_unchanged_prompt":"Unchanged","peers_messaging_disabled":"Peer\'s messaging is disabled.","permission_admin":"Approve ({val})","permission_delete":"Delete ({val})","permission_join":"Join ({val})","permission_owner":"Owner ({val})","permission_pres":"Get notified ({val})","permission_read":"Read ({val})","permission_share":"Share ({val})","permission_write":"Write ({val})","phone_dative":"phone","private_editing_placeholder":"Visible to you only","push_init_failed":"Failed to initialize push notifications","reconnect_countdown":"Disconnected. Reconnecting in {seconds}…","reconnect_now":"Try now","reload_update":"Reload","report_chat_warning":"Are you sure you want to block and report this conversation?","requested_permissions":"Requested","save_attachment":"save","search_for_contacts":"Use search to find contacts","search_no_results":"Search returned no results","search_placeholder":"List like email:alice@example.com, tel:17025550003...","sidepanel_title_acc_general":"General","sidepanel_title_acc_notifications":"Notifications","sidepanel_title_acc_security":"Security","sidepanel_title_acc_support":"Support","sidepanel_title_account_settings":"Account Settings","sidepanel_title_archive":"Archived Chats","sidepanel_title_blocked":"Blocked Chats","sidepanel_title_cred":"Confirm Credentials","sidepanel_title_login":"Sign In","sidepanel_title_newtpk":"Start New Chat","sidepanel_title_register":"Create Account","sidepanel_title_reset":"Reset Password","sidepanel_title_settings":"Settings","stay_logged_in":"Stay logged in","tabtitle_find_user":"find","tabtitle_group_by_id":"by id","tabtitle_new_group":"new group","tags_editor_no_tags":"Add some tags","tags_not_found":"No tags defined. Add some.","title_all_contacts":"All Contacts","title_group_members":"Group Members","title_info":"Info","title_manage_tags":"Manage","title_not_found":"Not found","title_permissions":"Permissions","title_tag_manager":"Tags (user discovery)","topic_block_warning":"Are you sure you want to block this conversation?","topic_delete_warning":"Are you sure you want to delete this conversation?","topic_name_editing_placeholder":"Freeform name of the group","unnamed_topic":"Unnamed","update_available":"Update available.","upload_finishing":"finishing...","user_not_found":"Not found","validate_credential_action":"confirm"},"es":{"validate_credential_action":"confirmar","title_tag_manager":"Etiquetas (descubrimiento de usuarios)","label_user_contacts":"Contactos:","button_add_another":"Añadir contacto","label_message_sound":"Sonido de mensaje:","label_push_notifications":"Alertas de notificaciones:","label_push_notifications_disabled":"Alertas de notificaciones (requiere HTTPS):","label_incognito_mode":"Modo incógnito:","delete_account":"Eliminar cuenta","delete_account_arning":"¿Estás seguro de que deseas eliminar permanentemente tu cuenta? Esta acción es irreversible.","label_password":"Contraseña","password_unchanged_prompt":"Sin cambios","button_logout":"Cerrar sesión","button_delete_account":"Eliminar cuenta","label_default_access_mode":"Modo de acceso predeterminado:","blocked_contacts_link":"Contactos bloqueados ({count})","link_contact_us":"Contáctanos","link_terms_of_service":"Términos de uso","link_privacy_policy":"Política de privacidad","label_sdk":"SDK:","label_server_address":"Dirección del servidor:","archived_contacts":"Contactos archivados ({count})","contacts_not_found":"No tienes chats
¯∖_(ツ)_/¯","full_name_prompt":"Nombre completo, p.ej. Juan González Hernández","email_prompt":"Correo electrónico, p.ej. juan@example.com","button_sign_up":"Regístrate","label_your_name":"Tu nombre","label_user_id":"ID:","button_edit":"Editar","requested_permissions":"Solicitados","granted_permissions":"Otorgados","menu_item_edit_permissions":"Editar permisos","label_other_user":"Otros","action_clear_messages":"Borrar mensajes","clear_messages_warning":"¿Estás seguro de que quieres eliminar todos los mensajes? Esta acción es irreversible.","action_delete_messages":"Borrar mensajes para todos","delete_messages_warning":"¿Estás seguro de que quieres eliminar todos los mensajes para todos? Esta acción es irreversible.","action_leave_chat":"Dejar conversación","leave_chat_warning":"¿Estás seguro de que quieres dejar esta conversación?","action_block_contact":"Bloquear contacto","block_contact_warning":"¿Estás seguro de que quieres bloquear a este contacto?","action_report_chat":"Reportar conversación","report_chat_warning":"¿Estás seguro de que quieres bloquear y reportar a esta conversación?","title_info":"Información","label_topic_name":"Nombre del tema","label_private":"Comentario privado","private_editing_placeholder":"Sólo visible para tí","label_muting_topic":"Silenciado:","action_more":"Más","label_your_permissions":"Tus permisoss:","label_permissions":"Permisos:","label_you":"Tú:","label_default_access":"Modo de acceso predeterminado:","label_group_members":"Miembros del grupo:","button_add_members":"Añadir miembros","group_has_no_members":"No hay miembros","login_prompt":"Nombre de usuario","password_prompt":"Contraseña","stay_logged_in":"Permanecer conectado","forgot_password_link":"¿Olvidaste tu contraseña?","button_sign_in":"Entrar","label_client":"Cliente:","label_server":"Servidor:","online_now":"en línea","last_seen_timestamp":"Últ. vez","title_not_found":"No encontrado","unnamed_topic":"Sin nombre","messages_not_readable":"sin acceso a mensajes","peers_messaging_disabled":"La mensajería Peer está deshabilitada.","enable_peers_messaging":"Habilitar","search_for_contacts":"Usa la búsqueda para encontrar contactos","search_no_results":"La búsqueda no arrojó resultados","tabtitle_find_user":"encontrar","tabtitle_new_group":"nuevo grupo","tabtitle_group_by_id":"por ID","new_password_placeholder":"Introduzca una nueva contraseña","label_reset_password":"Enviar un correo electrónico de restablecimiento de contraseña:","credential_email_prompt":"Tu correo electrónico de registro","button_reset":"Restablecer","button_send_request":"Enviar petición","label_server_to_use":"Servidor para usar:","label_wire_transport":"Transporte de alambre:","button_update":"Actualizar","sidepanel_title_login":"Iniciar sesión","sidepanel_title_register":"Crear cuenta","sidepanel_title_settings":"Ajustes","sidepanel_title_account_settings":"Ajustes de la cuenta","sidepanel_title_acc_general":"General","sidepanel_title_acc_security":"Seguridad","sidepanel_title_acc_notifications":"Notificaciones","sidepanel_title_acc_support":"Soporte","sidepanel_title_newtpk":"Iniciar un nuevo chat","sidepanel_title_cred":"Confirmar credenciales","sidepanel_title_reset":"Restablecer contraseña","sidepanel_title_archive":"Chats archivados","sidepanel_title_blocked":"Chats bloqueados","update_available":"Actualización disponible.","reload_update":"Recargar","reconnect_countdown":"Desconectado. Reconectando en {seconds}…","reconnect_now":"Reintentar","push_init_failed":"Error al inicializar las notificaciones push","invalid_security_token":"Token de seguridad inválido","no_connection":"Sin conexión","code_doesnot_match":"El código no coincide","phone_dative":"teléfono","email_dative":"correo electrónico","enter_confirmation_code_prompt":"Intruduzca el código de confirmación enviado a tu {method}:","numeric_confirmation_code_prompt":"Sólo números","button_confirm":"Confirmar","save_attachment":"guardar","deleted_content":"este mensaje fue eliminado","invalid_content":"contenido inválido","user_not_found":"Usuario no encontrado","badge_you":"tú","badge_owner":"propietario","menu_item_info":"Información","menu_item_clear_messages":"Borrar mensajes","menu_item_clear_messages_for_all":"Borrar para todos","menu_item_delete":"Eliminar","menu_item_delete_for_all":"Eliminar para todos","menu_item_send_retry":"Inténtalo de nuevo","menu_item_mute":"Silenciar","menu_item_unmute":"Anular el silencio","menu_item_delete_topic":"Eliminar","topic_delete_warning":"¿Estás seguro de que quieres eliminar esta conversación?","menu_item_unblock":"Desbloquear","menu_item_block":"Bloquear","topic_block_warning":"¿Estás seguro de que quieres bloquear esta conversación","menu_item_member_delete":"Eliminar","menu_item_archive_topic":"Archivar","action_cancel":"cancelar","upload_finishing":"terminando...","no_contacts":"No tienes contactos :-(","contacts_not_found_short":"Ningún contacto coincide con \'\'{query}\'\'","title_group_members":"Miembros del grupo","title_all_contacts":"Todos los contactos","button_ok":"OK","button_cancel":"Cancelar","more_online_members":"+{overflow} más","download_action":"descargar","label_file_name":"Nombre del archivo:","label_content_type":"Tipo de contenido:","label_size":"Tamaño:","chat_invitation":"Estás invitado a participar en un nuevo chat. ¿Qué te gustaría hacer?","chat_invitation_accept":"Aceptar","chat_invitation_ignore":"Ignorar","chat_invitation_block":"Bloquear","error_invalid_id":"ID inválido","group_user_id_prompt":"ID del grupo o usuario","button_subscribe":"Suscribirse","topic_name_editing_placeholder":"Nombre del grupo","button_create":"Crear","permission_join":"Unirse ({val})","permission_read":"Leer ({val})","permission_write":"Escribir ({val})","permission_pres":"Ser notificado ({val})","permission_admin":"Approbar ({val})","permission_share":"Compartir ({val})","permission_delete":"Eliminar ({val})","permission_owner":"Propietario ({val})","title_permissions":"Permisos","message_sending":"enviando...","message_sending_failed":"no se pudo enviar el mensaje","search_placeholder":"Ej. email:alice@example.com, tel:17025550003...","messaging_disabled_prompt":"El envío de mensajes está deshabilitado","new_message_prompt":"Nuevo mensaje","image_caption_prompt":"Añade un comentario","file_attachment_too_large":"El tamaño del archivo {size} excede el límite de {limit}.","cannot_initiate_file_upload":"No se pudo iniciar la carga del archivo.","tags_not_found":"No hay etiquetas definidas. Añade unas.","tags_editor_no_tags":"Añadir etiquetas","title_manage_tags":"Gestionar","channel_prompt":"Este es un canal","channel":"canal"},"ko":{"validate_credential_action":"확인","title_tag_manager":"태그(사용자검색)","label_user_contacts":"연락처: ","button_add_another":"다른항목추가","label_message_sound":"메시지소리: ","label_push_notifications":"통지경보: ","label_push_notifications_disabled":"통지경보(HTTPS필요): ","label_incognito_mode":"시크릿모드: ","delete_account":"계정삭제","delete_account_arning":"계정을삭제하시겠습니까?실행취소할수없습니다.","label_password":"비밀번호","password_unchanged_prompt":"변경되지않음","button_logout":"로그아웃","button_delete_account":"계정삭제","label_default_access_mode":"기본액세스모드: ","blocked_contacts_link":"차단된연락처({수})","link_contact_us":"문의처","link_terms_of_service":"서비스약관","link_privacy_policy":"개인정보보호정책","label_sdk":"SDK:","label_server_address":"서버주소: ","archived_contacts":"보관된연락처({수})","contacts_not_found":"채팅이없습니다
¯∖_(ツ)_/¯","full_name_prompt":"전체이름(예:홍길동)","email_prompt":"이메일(예:hong@example.com)","button_sign_up":"가입","label_your_name":"이름","label_user_id":"ID:","button_edit":"편집","requested_permissions":"요청","menu_item_edit_permissions":"편집권한","label_other_user":"기타","action_clear_messages":"메시지지우기","clear_messages_warning":"모든메시지를지우시겠습니까?실행취소할수없습니다.","action_delete_messages":"모든메시지지우기","delete_messages_warning":"모든사람의모든메시지를삭제하시겠습니까?실행취소할수없습니다.","action_leave_chat":"대화나누기","leave_chat_warning":"이대화를나가시겠습니까?","action_block_contact":"연락차단","block_contact_warning":"이연락처를차단하시겠습니까?","action_report_chat":"대화기록","report_chat_warning":"이대화를차단하고기록하시겠습니까?","title_info":"정보","label_topic_name":"이름","label_private":"개인코멘트","private_editing_placeholder":"나만볼수있습니다","label_muting_topic":"음소거: ","action_more":"더보기","label_your_permissions":"권한: ","label_permissions":"권한: ","label_you":"당신: ","label_default_access":"기본액세스모드: ","label_group_members":"그룹회원: ","button_add_members":"회원추가","group_has_no_members":"회원없음","login_prompt":"로그인","password_prompt":"비밀번호","stay_logged_in":"로그인상태유지","forgot_password_link":"비밀번호를잊으셨습니까?","button_sign_in":"로그인","label_client":"클라이언트: ","label_server":"서버: ","online_now":"현재접속중","last_seen_timestamp":"마지막으로본","title_not_found":"찾을수없음","unnamed_topic":"이름없는","peers_messaging_disabled":"동료의메시지가비활성화되었습니다.","enable_peers_messaging":"활성화","search_for_contacts":"검색을사용하여연락처찾기","search_no_results":"검색결과가없습니다","tabtitle_find_user":"찾기","tabtitle_new_group":"새그룹","tabtitle_group_by_id":"id로","new_password_placeholder":"새비밀번호입력","label_reset_password":"비밀번호재설정이메일보내기: ","credential_email_prompt":"등록이메일","button_reset":"재설정","button_send_request":"요청보내기","label_server_to_use":"사용할서버:","label_wire_transport":"와이어수송:","button_update":"업데이트","sidepanel_title_login":"로그인","sidepanel_title_register":"계정만들기","sidepanel_title_settings":"설정","sidepanel_title_account_settings":"계정설정","sidepanel_title_acc_general":"일반","sidepanel_title_acc_security":"보안","sidepanel_title_acc_notifications":"알림","sidepanel_title_acc_support":"지원","sidepanel_title_newtpk":"새채팅시작","sidepanel_title_cred":"자격증명확인","sidepanel_title_reset":"비밀번호재설정","sidepanel_title_archive":"보관된채팅","sidepanel_title_blocked":"차단된채팅","update_available":"업데이트가능.","reload_update":"재로드","reconnect_countdown":"연결이끊어졌습니다.다시연결하는중{초}…","reconnect_now":"지금시도","push_init_failed":"푸시알림을초기화하지못했습니다","invalid_security_token":"유효하지않은보안토큰","no_connection":"연결없음","code_doesnot_match":"코드가일치하지않습니다","phone_dative":"전화","email_dative":"이메일","enter_confirmation_code_prompt":"{방법}으로보낸확인코드를입력하십시오:","numeric_confirmation_code_prompt":"숫자만","button_confirm":"확인","save_attachment":"저장","invalid_content":"잘못된내용","user_not_found":"찾을수없음","badge_you":"당신","badge_owner":"소유자","menu_item_info":"정보","menu_item_clear_messages":"메시지지우기","menu_item_clear_messages_for_all":"모두지우기","menu_item_delete":"삭제","menu_item_delete_for_all":"모두삭제","menu_item_send_retry":"다시시도","menu_item_mute":"음소거","menu_item_unmute":"음소거해제","menu_item_delete_topic":"삭제","topic_delete_warning":"이대화를삭제하시겠습니까?","menu_item_unblock":"차단해제","menu_item_block":"차단","topic_block_warning":"이대화를차단하시겠습니까?","menu_item_member_delete":"제거","menu_item_archive_topic":"보관","action_cancel":"취소","upload_finishing":"마무리...","no_contacts":"연락처가없습니다 (._.)","contacts_not_found_short":"\'{문의}\'와일치하는연락처가없습니다.","title_group_members":"그룹구성원","title_all_contacts":"모든연락처","button_ok":"OK","button_cancel":"취소","more_online_members":"+{넘침}더보기","download_action":"다운로드","label_file_name":"파일이름: ","label_content_type":"컨텐츠유형: ","label_size":"크기: ","chat_invitation":"새로운대화를시작하도록초대되었습니다.무엇을하시겠습니까?","chat_invitation_accept":"수락","chat_invitation_ignore":"무시","chat_invitation_block":"차단","error_invalid_id":"잘못된ID","group_user_id_prompt":"그룹또는사용자ID","button_subscribe":"구독","topic_name_editing_placeholder":"그룹의자유형이름","button_create":"작성","permission_join":"참여({val})","permission_read":"읽기({val})","permission_write":"쓰기({val})","permission_pres":"알림받기({val})","permission_admin":"승인({val})","permission_share":"공유({val})","permission_delete":"삭제({val})","permission_owner":"소유자({val})","title_permissions":"권한","message_sending":"보내기...","message_sending_failed":"실패","search_placeholder":"email:alice@example.com,tel:17025550003...와같은목록","messaging_disabled_prompt":"메시지비활성화","new_message_prompt":"새메시지","image_caption_prompt":"이미지설명","file_attachment_too_large":"파일크기{크기}이(가){제한}제한을초과합니다.","cannot_initiate_file_upload":"파일업로드를시작할수없습니다.","tags_not_found":"태그가정의되지않았습니다.일부를추가하십시오.","tags_editor_no_tags":"일부태그추가","title_manage_tags":"관리","granted_permissions":"승낙하다","messages_not_readable":"메시지에 액세스 할 수 없습니다","deleted_content":"내용이 삭제되었습니다","channel_prompt":"이 채널입니다","channel":"채널"},"ro":{"validate_credential_action":"confirmă","title_tag_manager":"Tag-uri (user discovery)","label_user_contacts":"Contacte:","button_add_another":"Adaugă","label_message_sound":"Sunet de mesaj:","label_push_notifications":"Alerte de notificare:","label_push_notifications_disabled":"Alerte de notificare (necesită HTTPS):","label_incognito_mode":"Mod incognito:","delete_account":"Șterge contul","delete_account_arning":"Ești sigur că dorești să ștergi contul? Acesta nu va putea fi recuperat.","label_password":"Parola","password_unchanged_prompt":"Neschimbată","button_logout":"Deconectare","button_delete_account":"Șterge cont","label_default_access_mode":"Default access mode:","blocked_contacts_link":"Contact blocate ({count})","link_contact_us":"Contactează-ne","link_terms_of_service":"Termenii Serviciului","link_privacy_policy":"Politica de Confidențialitate","label_sdk":"SDK:","label_server_address":"Adresa serverului:","archived_contacts":"Contacte arhivate ({count})","contacts_not_found":"Nu ai contacte salvate
¯∖_(ツ)_/¯","full_name_prompt":"Numele tău","email_prompt":"Adresa de e-mail","button_sign_up":"Creează cont","label_your_name":"Numele tău","label_user_id":"ID:","button_edit":"Editează","requested_permissions":"Necesare","granted_permissions":"Oferite","menu_item_edit_permissions":"Editează permisiuni","label_other_user":"Altele","action_clear_messages":"Șterge mesajele","clear_messages_warning":"Ești sigur că dorești să ștergi mesajele? Acestea nu pot fi recuperate.","action_delete_messages":"Șterge toate mesajele","delete_messages_warning":"Ești sigur că dorești să șterge mesajele din toate conversațiile? Acestea nu pot fi recuperate.","action_leave_chat":"Ieși din conversație","leave_chat_warning":"Ești sigur că dorești să ieși din conersație?","action_block_contact":"Blochează contact","block_contact_warning":"Ești sigur că dorești să blochezi acest contact?","action_report_chat":"Raportează conversația","report_chat_warning":"Ești sigur că dorești să blochezi și să raportezi această conversație?","title_info":"Info","label_topic_name":"Nume","label_private":"Comentariu privat","private_editing_placeholder":"Vizibil doar ție","label_muting_topic":"Mod silențios (muted):","action_more":"Mai multe","label_your_permissions":"Permisiuniile tale:","label_permissions":"Permisiuni:","label_you":"Tu:","label_default_access":"Modul default:","label_group_members":"Membrii grupului:","button_add_members":"Adaugă persoane","group_has_no_members":"În acest grup nu se află persoane","login_prompt":"Conectează-te","password_prompt":"Parola","stay_logged_in":"Rămâi conectat","forgot_password_link":"Ți-ai uitat parola?","button_sign_in":"Conectează-te","label_client":"Client:","label_server":"Server:","online_now":"online acum","last_seen_timestamp":"Văzut ultima dată","title_not_found":"Nu a fost găsit","channel":"canal","unnamed_topic":"Nedenumit","messages_not_readable":"Mesajele nu pot fi citite","peers_messaging_disabled":"Mesageria de tip Peer este dezactivată.","enable_peers_messaging":"Activează","search_for_contacts":"Caută în contacte","search_no_results":"Nu s-au găsit rezultate","tabtitle_find_user":"caută","tabtitle_new_group":"grup nou","tabtitle_group_by_id":"după id","new_password_placeholder":"Introdu parolă","label_reset_password":"Resetează parola:","credential_email_prompt":"Adresa de e-mail","button_reset":"Resetează","button_send_request":"Trimite cerere","label_server_to_use":"Server de utilizat:","label_wire_transport":"Transportul legat:","button_update":"Actualizează","sidepanel_title_login":"Conectează-te","sidepanel_title_register":"Creează Cont","sidepanel_title_settings":"Setări","sidepanel_title_account_settings":"Setările Contului","sidepanel_title_acc_general":"Generale","sidepanel_title_acc_security":"Securitate","sidepanel_title_acc_notifications":"Notificări","sidepanel_title_acc_support":"Ajutor","sidepanel_title_newtpk":"Creeză un nou Chat","sidepanel_title_cred":"Confirmă credențiale","sidepanel_title_reset":"Resetează Parola","sidepanel_title_archive":"Conversații Arhivate","sidepanel_title_blocked":"Conversații Blocate","reconnect_countdown":"Deconectat. Se încearcă conectarea în {seconds}…","reconnect_now":"Încearcă din nou","push_init_failed":"Nu s-a reușit inițializarea tip push notifications","invalid_security_token":"Codul de securitate este invalid","no_connection":"Nu există conexiune","code_doesnot_match":"Codul furnizat nu este valid","update_available":"Actualizare disponibilă.","reload_update":"Reîncarcă","phone_dative":"telefon","email_dative":"email","enter_confirmation_code_prompt":"Introu codul de confirmare trimis pe {method}:","numeric_confirmation_code_prompt":"Doar cifre","button_confirm":"Confirmă","save_attachment":"salvează","deleted_content":"conținut șters","invalid_content":"conținut invalid","user_not_found":"Utilizatorul nu a fost găsit","badge_you":"tu","badge_owner":"owner","menu_item_info":"Info","menu_item_clear_messages":"Șterge mesajele","menu_item_clear_messages_for_all":"Ștergele pe toate","menu_item_delete":"Șterge","menu_item_delete_for_all":"Ștergele pe toate","menu_item_send_retry":"Reîncearcă","menu_item_mute":"Mute","menu_item_unmute":"Unmute","menu_item_delete_topic":"Șterge","topic_delete_warning":"Ești sigur că dorești să șterge această conversație?","menu_item_unblock":"Deblochează","menu_item_block":"Blochează","topic_block_warning":"Ești sigur că dorești să blochezi această conversație?","menu_item_member_delete":"Șterge persoană","menu_item_archive_topic":"Arhivează","action_cancel":"anulează","upload_finishing":"se încarcă...","no_contacts":"Nu ai contacte adăugate :-(","contacts_not_found_short":"Niciun contact găsit după criteriile \'\'{query}\'\'","title_group_members":"Persoanele din grup","title_all_contacts":"Toate Contactele","button_ok":"OK","button_cancel":"Anulează","more_online_members":"+{overflow} mai mult","download_action":"download","label_file_name":"Nume fișier:","label_content_type":"Tip conținut:","label_size":"Size:","chat_invitation":"Ai primit invitație într-o conversație. Accepți?","chat_invitation_accept":"Da, accept","chat_invitation_ignore":"Ignoră","chat_invitation_block":"Blochează","error_invalid_id":"ID Invalid","group_user_id_prompt":"Grup sau user ID","button_subscribe":"Subscribe","topic_name_editing_placeholder":"Numele grupului","channel_prompt":"Acesta este un canal","button_create":"Creează","permission_join":"Participare ({val})","permission_read":"Citire ({val})","permission_write":"Scriere ({val})","permission_pres":"Notificare ({val})","permission_admin":"Aprobare ({val})","permission_share":"Distribuire ({val})","permission_delete":"Ștergere ({val})","permission_owner":"Deținător ({val})","title_permissions":"Permisiuni","message_sending":"se trimite...","message_sending_failed":"eroare","search_placeholder":"Caută după e-mail sau număr telefon...","messaging_disabled_prompt":"Mesageria este dezactivată","new_message_prompt":"Mesaj nou","image_caption_prompt":"Titlul imaginii","file_attachment_too_large":"Dimensiunea fișiterului {size} depășește limita de {limit}.","cannot_initiate_file_upload":"Nu se poate face încărcarea.","tags_not_found":"Niciun tag definit. Adaugă.","tags_editor_no_tags":"Adaugă tag-uri","title_manage_tags":"Administrează"},"ru":{"contacts_not_found":"Чатов нет
¯∖_(ツ)_/¯","full_name_prompt":"Полное имя, напр. Иван Петров","email_prompt":"Email, напр. ivan@example.com","button_sign_up":"Создать аккаунт","label_your_name":"Ваше имя","label_password":"Пароль","password_unchanged_prompt":"Не изменен","label_user_id":"ID:","label_default_access_mode":"Доступ по умолчанию:","label_message_sound":"Звук нового сообщения:","label_push_notifications":"Уведомления:","label_push_notifications_disabled":"Уведомления (требуют HTTPS):","title_tag_manager":"Теги для поиска","button_logout":"Выйти","login_prompt":"Логин","password_prompt":"Пароль","stay_logged_in":"Запомнить","forgot_password_link":"Напомнить пароль","button_sign_in":"Войти","label_client":"Клиент:","label_server":"Сервер:","online_now":"онлайн","last_seen_timestamp":"Был активен","title_not_found":"Не найден","unnamed_topic":"Без названия","messages_not_readable":"нет доступа к сообщениям","tabtitle_find_user":"найти","tabtitle_new_group":"создать","tabtitle_group_by_id":"по id","label_server_to_use":"Использовать сервер:","label_wire_transport":"Соединение:","button_update":"Применить","sidepanel_title_login":"Авторизация","sidepanel_title_register":"Зарегистрироваться","sidepanel_title_settings":"Настройки","sidepanel_title_account_settings":"Настройки аккаунта","sidepanel_title_newtpk":"Новый чат","sidepanel_title_cred":"Подтвердить","sidepanel_title_reset":"Сменить пароль","tags_not_found":"Тегов нет. Добавьте","tags_editor_no_tags":"Добавьте теги","title_manage_tags":"Редактировать","message_sending":"в пути...","message_sending_failed":"ошибка","search_placeholder":"Список, напр. email:alice@example.com, tel:+17025550003...","messaging_disabled_prompt":"Отправка недоступна","new_message_prompt":"Новое сообщение","file_attachment_too_large":"Размер файла {size} превышает {limit} лимит.","cannot_initiate_file_upload":"Ошибка загрузки файла.","search_for_contacts":"Поиск контактов","enter_confirmation_code_prompt":"Код подтверждения, полученный по {method}:","numeric_confirmation_code_prompt":"Только цифры","button_confirm":"Подтвердить","button_ok":"OK","button_cancel":"Отменить","invalid_content":"сообщение не читается","label_file_name":"Имя файла:","label_content_type":"Тип:","label_size":"Размер:","phone_dative":"телефону","email_dative":"емейлу","title_group_members":"Участники","download_action":"скачать","permission_join":"Подписываться ({val})","permission_read":"Читать ({val})","permission_write":"Писать ({val})","permission_pres":"Уведомлять ({val})","permission_admin":"Подтверждать ({val})","permission_share":"Приглашать ({val})","permission_delete":"Удалять ({val})","permission_owner":"Владелец ({val})","title_permissions":"Права доступа","requested_permissions":"Требуются","granted_permissions":"Получены","menu_item_edit_permissions":"Права доступа","label_other_user":"Второй","label_topic_name":"Название","label_private":"Комментарий","private_editing_placeholder":"Виден только вам","label_muting_topic":"Без уведомлений","action_more":"Ещё","label_your_permissions":"Ваши права доступа:","label_permissions":"Права доступа:","label_you":"Вы:","label_default_access":"Права по умолчанию:","label_group_members":"Участники чата:","button_add_members":"Добавить","group_has_no_members":"Нет участников","action_leave_chat":"Уйти из чата","menu_item_info":"Информация","menu_item_clear_messages":"Удалить сообщения","menu_item_clear_messages_for_all":"Удалить для всех","menu_item_delete":"Удалить","menu_item_delete_for_all":"Удалить для всех","menu_item_send_retry":"Отправить заново","menu_item_mute":"Не уведомлять","menu_item_unmute":"Уведомлять","menu_item_delete_topic":"Удалить чат","menu_item_unblock":"Разблокировать","menu_item_block":"Заблокировать","menu_item_member_delete":"Отписать","title_info":"Подробности","new_password_placeholder":"Введите новый пароль","label_reset_password":"Отправить емейл для смены пароля:","credential_email_prompt":"Регистрационный емейл","button_reset":"Изменить","button_send_request":"Отправить","action_cancel":"отменить","upload_finishing":"завершение...","no_contacts":"Ничего нет :-(","contacts_not_found_short":"Нет контактов для запроса \'\'{query}\'\'","title_all_contacts":"Все контакты","error_invalid_id":"Неверный ID","group_user_id_prompt":"ID чата или пользователя","button_subscribe":"Подписаться","topic_name_editing_placeholder":"Название чата","button_create":"Создать","badge_you":"вы","badge_owner":"влад.","update_available":"Есть новая версия приложения.","reload_update":"Обновить","user_not_found":"Не найден","reconnect_countdown":"Нет связи. Подключение через {seconds}…","reconnect_now":"Подключить сейчас.","save_attachment":"сохранить","menu_item_archive_topic":"В архив","archived_contacts":"Чаты в архиве ({count})","sidepanel_title_archive":"Архив чатов","chat_invitation":"Вас пригласили начать новый чат. Как вы хотите поступить?","chat_invitation_accept":"Принять","chat_invitation_ignore":"Игнорировать","chat_invitation_block":"Заблокировать","peers_messaging_disabled":"Чат заблокирован у корреспондента.","enable_peers_messaging":"Разблокировать.","more_online_members":"+еще {overflow}","label_user_contacts":"Конакты:","validate_credential_action":"подтвердить","link_contact_us":"Связаться с нами","link_terms_of_service":"Условия сервиса","link_privacy_policy":"Политика конфиденциальности","action_delete_messages":"Удалить сообщения","action_block_contact":"Заблокировать контакт","action_report_chat":"Сообщить о нарушении","delete_messages_warning":"Вы действительно хотите удалить все сообщения?","leave_chat_warning":"Вы действительно хотите покинуть этот чат?","block_contact_warning":"Вы действительно заблокировать этот контакт?","report_chat_warning":"Вы действительно хотите сообщить о нарушении и заблокировать этот чат?","action_clear_messages":"Удалить сообщения","clear_messages_warning":"Вы действительно хотите удалить все сообщения в чате? Их будет невозможно восстановить.","topic_delete_warning":"Вы действительно хотите удалить этот чат?","topic_block_warning":"Вы действительно хотите заблокировать этот чат?","search_no_results":"Ничего не найдено","deleted_content":"удалено","image_caption_prompt":"Подпись к фото","label_incognito_mode":"Режим инкогнито:","delete_account":"Удалить аккаунт","delete_account_arning":"Вы уверены, что ходите удалить свой аккаунт? Его невозможно будет восстановить.","button_delete_account":"Удалить аккаунт","sidepanel_title_acc_security":"Безопасность","sidepanel_title_acc_notifications":"Уведомления","sidepanel_title_acc_support":"Поддержка","label_sdk":"SDK:","label_server_address":"Адрес сервера:","button_edit":"Редактировать","button_add_another":"Добавить","sidepanel_title_acc_general":"Общие настройки","blocked_contacts_link":"Заблокированные ({count})","sidepanel_title_blocked":"Заблокированные чаты","push_init_failed":"Ошибка инициализации пуш уведомлений","invalid_security_token":"Токен некорректен","no_connection":"Нет связи","code_doesnot_match":"Код не совпадает","channel_prompt":"Создать канал","channel":"канал"},"zh":{"archived_contacts":"已归档联系人 ({count})","contacts_not_found":"你尚无会话
¯∖_(ツ)_/¯","full_name_prompt":"全名,例如张伟","email_prompt":"电子邮件,例如 zhang@example.com","button_sign_up":"注册","label_your_name":"你的姓名","label_password":"密码","password_unchanged_prompt":"未改变","label_user_id":"地址:","label_default_access_mode":"蓦然访问模式:","label_message_sound":"消息提示音:","label_push_notifications":"通知提醒:","label_push_notifications_disabled":"通知提醒(需要 HTTPS):","title_tag_manager":"标签(用户发现)","button_logout":"登出","requested_permissions":"已请求","granted_permissions":"已授予","menu_item_edit_permissions":"编辑权限","label_other_user":"其他","title_info":"信息","label_topic_name":"名称","label_private":"私人评论","private_editing_placeholder":"仅自己可见","label_muting_topic":"已静音:","action_more":"更多","label_your_permissions":"你的权限:","label_permissions":"权限:","label_you":"你:","label_default_access":"默认权限模式:","label_group_members":"群组成员:","button_add_members":"添加成员","group_has_no_members":"无成员","action_leave_chat":"离开","login_prompt":"登录","password_prompt":"密码","stay_logged_in":"保持登录","forgot_password_link":"忘记密码?","button_sign_in":"登录","label_client":"客户端:","label_server":"服务器:","online_now":"在线","last_seen_timestamp":"最后可见","title_not_found":"无法找到","unnamed_topic":"未命名","messages_not_readable":"无消息访问权限","peers_messaging_disabled":"成员间消息已禁用。","enable_peers_messaging":"启用","tabtitle_find_user":"搜索","tabtitle_new_group":"新群组","tabtitle_group_by_id":"通过 id","search_for_contacts":"使用搜索寻找联系人","new_password_placeholder":"输入新密码","label_reset_password":"发送密码重置邮件:","credential_email_prompt":"你的注册邮箱","button_reset":"重置","button_send_request":"发送请求","label_server_to_use":"使用的服务器:","label_wire_transport":"线路传输:","button_update":"更新","sidepanel_title_login":"登录","sidepanel_title_register":"创建账户","sidepanel_title_settings":"设置","sidepanel_title_account_settings":"帐号设定","sidepanel_title_newtpk":"开始新会话","sidepanel_title_cred":"确认凭据","sidepanel_title_reset":"重置密码","sidepanel_title_archive":"已存档会话","update_available":"更新可用。","reload_update":"重新载入","reconnect_countdown":"连接已断开。{seconds} 秒后重新连接…","reconnect_now":"立即尝试","phone_dative":"电话","email_dative":"电子邮件","enter_confirmation_code_prompt":"输入通过{method}发送的验证码:","numeric_confirmation_code_prompt":"仅数字","button_confirm":"确认","save_attachment":"保存","invalid_content":"无效内容","user_not_found":"未找到","badge_you":"你","badge_owner":"所有者","menu_item_info":"信息","menu_item_clear_messages":"清空消息","menu_item_clear_messages_for_all":"全部清除","menu_item_delete":"删除","menu_item_delete_for_all":"全部删除","menu_item_mute":"静音","menu_item_unmute":"取消静音","menu_item_delete_topic":"删除","menu_item_unblock":"取消屏蔽","menu_item_block":"屏蔽","menu_item_member_delete":"移除","menu_item_archive_topic":"归档","action_cancel":"取消","upload_finishing":"正在结束...","no_contacts":"你尚无联系人 (._.)","contacts_not_found_short":"无联系人匹配\'\'{query}\'\'","title_group_members":"群组成员","title_all_contacts":"全部联系人","button_ok":"好","button_cancel":"取消","download_action":"下载","label_file_name":"文件名:","label_content_type":"内容类型:","label_size":"大小:","chat_invitation":"你受邀开始新会话。你想怎么做?","chat_invitation_accept":"接受","chat_invitation_ignore":"忽略","chat_invitation_block":"屏蔽","error_invalid_id":"无效 ID","group_user_id_prompt":"群组或用户 ID","button_subscribe":"订阅","topic_name_editing_placeholder":"群组自由格式名称","button_create":"创建","permission_join":"加入 ({val})","permission_read":"读取 ({val})","permission_write":"写入 ({val})","permission_pres":"获取通知 ({val})","permission_admin":"批准 ({val})","permission_share":"分享 ({val})","permission_delete":"删除 ({val})","permission_owner":"所有者 ({val})","title_permissions":"权限","message_sending":"正在发送...","message_sending_failed":"发送失败","search_placeholder":"列表如 email:alice@example.com, tel:+17025550003...","messaging_disabled_prompt":"消息已禁用","new_message_prompt":"新消息","file_attachment_too_large":"文件大小 {size} 超过 {limit} 限制。","cannot_initiate_file_upload":"无法初始化文件上传。","tags_not_found":"尚未定义标签。添加一些。","tags_editor_no_tags":"添加一些标签","title_manage_tags":"管理标签","more_online_members":"还有{overflow}个","label_user_contacts":"往来:","validate_credential_action":"确认","link_contact_us":"联系我们","link_terms_of_service":"条款和条件","link_privacy_policy":"隐私政策","action_delete_messages":"删除所有帖子","action_block_contact":"屏蔽联系人","delete_messages_warning":"您确定要删除所有消息吗?无法撤消。","leave_chat_warning":"您确定要退出此对话吗?","block_contact_warning":"您确定要阻止此联系人吗?","action_report_chat":"检举垃圾邮件","report_chat_warning":"您确定要停止并报告此对话吗?","action_clear_messages":"删除讯息","clear_messages_warning":"您确定要清除所有消息吗?无法撤消。","topic_delete_warning":"您确定要删除此对话吗?","topic_block_warning":"您确定要阻止此对话吗?","search_no_results":"搜索返回任何结果","deleted_content":"内容已删除","image_caption_prompt":"图片标题","menu_item_send_retry":"重试","label_incognito_mode":"无痕模式:","delete_account":"删除帐户","delete_account_arning":"您确定要删除您的帐户吗?无法撤消。","button_delete_account":"删除帐户","sidepanel_title_acc_security":"安全","sidepanel_title_acc_notifications":"通知","sidepanel_title_acc_support":"支持","label_sdk":"开发包:","label_server_address":"服务器地址:","button_edit":"编辑","button_add_another":"加上另一个","sidepanel_title_acc_general":"常用设定","blocked_contacts_link":"封锁的联络人 ({count})","sidepanel_title_blocked":"被阻止的聊天","push_init_failed":"初始化推送通知失败","invalid_security_token":"无效的安全令牌","no_connection":"无连接","code_doesnot_match":"代码不匹配","channel_prompt":"这是一个频道","channel":"频道"}}'),l=firebase,r=(firebase.messaging,Tinode),c=e.n(r);class d extends s().PureComponent{render(){return this.props.visible?s().createElement("div",{className:"alert-container"},s().createElement("div",{className:"alert"},s().createElement("div",{className:"title"},this.props.title),s().createElement("div",{className:"content"},this.props.content),s().createElement("div",{className:"dialog-buttons"},this.props.onReject?s().createElement("button",{className:"outline",onClick:this.props.onReject},this.props.reject||s().createElement(n.FormattedMessage,{id:"button_cancel",defaultMessage:[{type:0,value:"Cancel"}]})):null,s().createElement("button",{className:"blue",onClick:this.props.onConfirm},this.props.confirm||s().createElement(n.FormattedMessage,{id:"button_ok",defaultMessage:[{type:0,value:"OK"}]}))))):null}}const h="TinodeWeb/0.16.10",p={hosted:"web.tinode.co",local:"localhost:6060"},m=p.hosted,u=3e3,_="JRWPS",g=13,b=128,v=262144,f=1<<23,E=1024,w=60,C=(0,n.defineMessages)({info:{id:"menu_item_info",defaultMessage:[{type:0,value:"Info"}]},clear_messages:{id:"menu_item_clear_messages",defaultMessage:[{type:0,value:"Clear messages"}]},clear_for_all:{id:"menu_item_clear_messages_for_all",defaultMessage:[{type:0,value:"Clear for All"}]},delete:{id:"menu_item_delete",defaultMessage:[{type:0,value:"Delete"}]},delete_for_all:{id:"menu_item_delete_for_all",defaultMessage:[{type:0,value:"Delete for All"}]},send_retry:{id:"menu_item_send_retry",defaultMessage:[{type:0,value:"Retry"}]},mute:{id:"menu_item_mute",defaultMessage:[{type:0,value:"Mute"}]},unmute:{id:"menu_item_unmute",defaultMessage:[{type:0,value:"Unmute"}]},topic_delete:{id:"menu_item_delete_topic",defaultMessage:[{type:0,value:"Delete"}]},topic_delete_warning:{id:"topic_delete_warning",defaultMessage:[{type:0,value:"Are you sure you want to delete this conversation?"}]},delete_messages_warning:{id:"delete_messages_warning",defaultMessage:[{type:0,value:"Are you sure you want to delete all messages for everyone? It cannot be undone."}]},unblock:{id:"menu_item_unblock",defaultMessage:[{type:0,value:"Unblock"}]},block:{id:"menu_item_block",defaultMessage:[{type:0,value:"Block"}]},topic_block_warning:{id:"topic_block_warning",defaultMessage:[{type:0,value:"Are you sure you want to block this conversation?"}]},member_delete:{id:"menu_item_member_delete",defaultMessage:[{type:0,value:"Remove"}]},archive:{id:"menu_item_archive_topic",defaultMessage:[{type:0,value:"Archive"}]},edit_permissions:{id:"menu_item_edit_permissions",defaultMessage:[{type:0,value:"Edit permissions"}]},clear_messages_warning:{id:"clear_messages_warning",defaultMessage:[{type:0,value:"Are you sure you want to clear all messages? It cannot be undone."}]}});class S extends s().Component{constructor(e){super(e);const{formatMessage:t}=e.intl;this.handlePageClick=this.handlePageClick.bind(this),this.handleEscapeKey=this.handleEscapeKey.bind(this),this.handleClick=this.handleClick.bind(this),this.MenuItems={topic_info:{id:"topic_info",title:t(C.info),handler:null},messages_clear:{id:"messages_clear",title:t(C.clear_messages),handler:(s,a)=>e.onShowAlert(t(C.menu_item_clear_messages),t(C.clear_messages_warning),(()=>{this.deleteMessages(!0,!1,s,a)}),null,!0,null)},messages_clear_hard:{id:"messages_clear_hard",title:t(C.clear_for_all),handler:(s,a)=>e.onShowAlert(t(C.menu_item_clear_messages_for_all),t(message.delete_messages_warning),(()=>this.deleteMessages(!0,!0,s,a)),null,!0,null)},message_delete:{id:"message_delete",title:t(C.delete),handler:(e,t)=>this.deleteMessages(!1,!1,e,t)},message_delete_hard:{id:"message_delete_hard",title:t(C.delete_for_all),handler:(e,t)=>this.deleteMessages(!1,!0,e,t)},menu_item_send_retry:{id:"menu_item_send_retry",title:t(C.send_retry),handler:(e,t)=>this.retryMessage(e,t)},topic_unmute:{id:"topic_unmute",title:t(C.unmute),handler:this.topicPermissionSetter.bind(this,"+P")},topic_mute:{id:"topic_mute",title:t(C.mute),handler:this.topicPermissionSetter.bind(this,"-P")},topic_unblock:{id:"topic_unblock",title:t(C.unblock),handler:this.topicPermissionSetter.bind(this,"+JP")},topic_block:{id:"topic_block",title:t(C.block),handler:(s,a)=>e.onShowAlert(t(C.menu_item_block),t(C.topic_block_warning),(()=>this.topicPermissionSetter("-JP",s,a).then((e=>(this.props.onTopicRemoved(s.topicName),e)))),null,!0,null)},topic_delete:{id:"topic_delete",title:t(C.topic_delete),handler:(s,a)=>e.onShowAlert(t(C.menu_item_delete_topic),t(C.topic_delete_warning),(()=>{const e=this.props.tinode.getTopic(s.topicName);if(e)return e.delTopic(!0).catch((e=>{a&&a(e.message,"err")}));console.log("Topic not found: ",s.topicName)}),null,!0,null)},topic_archive:{id:"topic_archive",title:t(C.archive),handler:(e,t)=>{const s=this.props.tinode.getTopic(e.topicName);if(s)return s.archive(!0).catch((e=>{t&&t(e.message,"err")}));console.log("Topic not found: ",e.topicName)}},permissions:{id:"permissions",title:t(C.menu_item_edit_permissions),handler:null},member_delete:{id:"member_delete",title:t(C.member_delete),handler:(e,t)=>{const s=this.props.tinode.getTopic(e.topicName);if(s&&e.user)return s.delSubscription(e.user).catch((e=>{t&&t(e.message,"err")}));console.log("Topic or user not found: '"+e.topicName+"', '"+e.user+"'")}},member_mute:{id:"member_mute",title:t(C.mute),handler:this.topicPermissionSetter.bind(this,"-P")},member_unmute:{id:"member_unmute",title:t(C.unmute),handler:this.topicPermissionSetter.bind(this,"+P")},member_block:{id:"member_block",title:t(C.block),handler:this.topicPermissionSetter.bind(this,"-JP")},member_unblock:{id:"member_unblock",title:t(C.unblock),handler:this.topicPermissionSetter.bind(this,"+JP")}}}componentDidMount(){document.addEventListener("mousedown",this.handlePageClick,!1),document.addEventListener("keyup",this.handleEscapeKey,!1)}componentWillUnmount(){document.removeEventListener("mousedown",this.handlePageClick,!1),document.removeEventListener("keyup",this.handleEscapeKey,!1)}handlePageClick(e){i().findDOMNode(this).contains(e.target)||(e.preventDefault(),e.stopPropagation(),this.props.hide())}handleEscapeKey(e){27===e.keyCode&&this.props.hide()}handleClick(e){e.preventDefault(),e.stopPropagation(),this.props.hide();let t=this.props.items[e.currentTarget.dataset.id];"string"==typeof t&&(t=this.MenuItems[t]),t?this.props.onAction(t.id,t.handler(this.props.params,this.props.onError),this.props.params):console.log("Invalid menu item ID",e.currentTarget.dataset.id)}deleteMessages(e,t,s,a){const i=this.props.tinode.getTopic(s.topicName);if(!i)return void console.log("Topic not found: ",s.topicName);if(!e&&i.cancelSend(s.seq))return;return(e?i.delMessagesAll(t):i.delMessagesList([s.seq],t)).catch((e=>{a&&a(e.message,"err")}))}retryMessage(e,t){const s=this.props.tinode.getTopic(e.topicName);if(!s||!s.flushMessage(e.seq))return;const a=s.createMessage(e.content,!1);return s.publishDraft(a).catch((e=>{t&&t(e.message,"err")}))}topicPermissionSetter(e,t,s){const a=this.props.tinode.getTopic(t.topicName);if(!a)return void console.log("Topic not found",t.topicName);let i=a.updateMode(t.user,e);return s&&(i=i.catch((e=>{s(e.message,"err")}))),i}render(){let e=0,t=[];this.props.items.map((a=>{"string"==typeof a&&(a=this.MenuItems[a]),a&&a.title&&t.push("-"==a.title?s().createElement("li",{className:"separator",key:e}):s().createElement("li",{onClick:this.handleClick,"data-id":e,key:e},a.title)),e++}));const a=g*(.7+2.5*t.length),i={left:(this.props.bounds.right-this.props.clickAt.x<156?this.props.clickAt.x-this.props.bounds.left-156:this.props.clickAt.x-this.props.bounds.left)+"px",top:(this.props.bounds.bottom-this.props.clickAt.y0?a<3?2:a<30?1:0:0;return a.toFixed(i)+" "+t[s]}class N extends s().PureComponent{render(){let e;if(!0===this.props.avatar){const t="grp"==c().topicType(this.props.topic),a=(t?"light-color":"dark-color")+Math.abs(function(e){let t=0;e=""+e;for(let s=0;s
"},{type:0,value:"¯∖_(ツ)_/¯"}]},(e=>s().createElement(W,{connected:this.props.connected,contacts:this.state.contactList,emptyListMessage:e,topicSelected:this.props.topicSelected,myUserId:this.props.myUserId,showOnline:!0,showUnread:!0,onTopicSelected:this.props.onTopicSelected,showContextMenu:this.props.showContextMenu,onAction:this.handleAction})))}}class He{static setObject(e,t){localStorage.setItem(e,JSON.stringify(t))}static getObject(e){const t=localStorage.getItem(e);return t&&JSON.parse(t)}static updateObject(e,t){const s=this.getObject(e);this.setObject(e,Object.assign(s||{},t))}static removeItem(e){localStorage.removeItem(e)}}class Ke extends s().PureComponent{constructor(e){super(e),this.state={login:"",password:"",email:"",fn:"",imageDataUrl:null,errorCleared:!1,saveToken:He.getObject("keep-logged-in")},this.handleLoginChange=this.handleLoginChange.bind(this),this.handlePasswordChange=this.handlePasswordChange.bind(this),this.handleEmailChange=this.handleEmailChange.bind(this),this.handleFnChange=this.handleFnChange.bind(this),this.handleImageChanged=this.handleImageChanged.bind(this),this.handleToggleSaveToken=this.handleToggleSaveToken.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}handleLoginChange(e){this.setState({login:e.target.value})}handlePasswordChange(e){this.setState({password:e})}handleEmailChange(e){this.setState({email:e.target.value})}handleFnChange(e){this.setState({fn:e.target.value})}handleImageChanged(e){this.setState({imageDataUrl:e})}handleToggleSaveToken(){He.setObject("keep-logged-in",!this.state.saveToken),this.setState({saveToken:!this.state.saveToken})}handleSubmit(e){e.preventDefault(),this.setState({errorCleared:!1}),this.props.onCreateAccount(this.state.login.trim(),this.state.password.trim(),oe(this.state.fn.trim().substring(0,w),this.state.imageDataUrl),{meth:"email",val:this.state.email})}render(){let e="blue";return this.props.disabled&&(e+=" disabled"),s().createElement("form",{className:"panel-form-column",onSubmit:this.handleSubmit},s().createElement("div",{className:"panel-form-row"},s().createElement("div",{className:"panel-form-column"},s().createElement(n.FormattedMessage,{id:"login_prompt",defaultMessage:[{type:0,value:"Login"}]},(e=>s().createElement("input",{type:"text",placeholder:e,autoComplete:"user-name",value:this.state.login,onChange:this.handleLoginChange,required:!0,autoFocus:!0}))),s().createElement(n.FormattedMessage,{id:"password_prompt",defaultMessage:[{type:0,value:"Password"}]},(e=>s().createElement($,{placeholder:e,autoComplete:"new-password",value:this.state.password,onFinished:this.handlePasswordChange,required:!0})))),s().createElement(x,{onImageChanged:this.handleImageChanged,onError:this.props.onError})),s().createElement("div",{className:"panel-form-row"},s().createElement(n.FormattedMessage,{id:"full_name_prompt",defaultMessage:[{type:0,value:"Full name, e.g. John Doe"}]},(e=>s().createElement("input",{type:"text",placeholder:e,autoComplete:"name",value:this.state.fn,onChange:this.handleFnChange,required:!0})))),s().createElement("div",{className:"panel-form-row"},s().createElement(n.FormattedMessage,{id:"email_prompt",defaultMessage:[{type:0,value:"Email, e.g. jdoe@example.com"}]},(e=>s().createElement("input",{type:"email",placeholder:e,autoComplete:"email",value:this.state.email,onChange:this.handleEmailChange,required:!0})))),s().createElement("div",{className:"panel-form-row"},s().createElement(R,{id:"save-token",name:"save-token",checked:this.state.saveToken,onChange:this.handleToggleSaveToken}),s().createElement(n.FormattedMessage,{id:"stay_logged_in",defaultMessage:[{type:0,value:"Stay logged in"}]},(e=>s().createElement("label",{htmlFor:"save-token"}," ",e)))),s().createElement("div",{className:"dialog-buttons"},s().createElement("button",{className:e,type:"submit"},s().createElement(n.FormattedMessage,{id:"button_sign_up",defaultMessage:[{type:0,value:"Sign up"}]}))))}}class We extends s().Component{constructor(e){super(e);const t=this.props.tinode.getMeTopic();this.state={fullName:t.public?t.public.fn:void 0,avatar:P(t.public?t.public.photo:null)}}render(){return s().createElement("div",{className:"scrollable-panel"},s().createElement("div",{className:"panel-form-row"},s().createElement("div",{className:"panel-form-column"},s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_your_name",defaultMessage:[{type:0,value:"Your name"}]})),s().createElement("div",{className:"large"},this.state.fullName),s().createElement("div",null,s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_user_id",defaultMessage:[{type:0,value:"ID:"}]}))," ",s().createElement("tt",null,this.props.myUserId))),s().createElement(x,{avatar:this.state.avatar,readOnly:!this.state.owner,uid:this.props.myUserId,title:this.state.fullName})),s().createElement("div",{className:"panel-form-row"},s().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onBasicNavigate("general")}},s().createElement("i",{className:"material-icons"},"edit")," ",s().createElement(n.FormattedMessage,{id:"button_edit",defaultMessage:[{type:0,value:"Edit"}]}))),s().createElement("div",{className:"hr"}),s().createElement("div",{className:"panel-form-column"},s().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onBasicNavigate("notif")}},s().createElement("i",{className:"material-icons"},"notifications")," ",s().createElement(n.FormattedMessage,{id:"sidepanel_title_acc_notifications",defaultMessage:[{type:0,value:"Notifications"}]})),s().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onBasicNavigate("security")}},s().createElement("i",{className:"material-icons"},"security")," ",s().createElement(n.FormattedMessage,{id:"sidepanel_title_acc_security",defaultMessage:[{type:0,value:"Security"}]})),s().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onBasicNavigate("support")}},s().createElement("i",{className:"material-icons"},"contact_support")," ",s().createElement(n.FormattedMessage,{id:"sidepanel_title_acc_support",defaultMessage:[{type:0,value:"Support"}]}))))}}class Ve extends s().Component{constructor(e){super(e);const t=this.props.tinode.getMeTopic();this.state={fullName:t.public?t.public.fn:void 0,avatar:P(t.public?t.public.photo:null),tags:t.tags(),credentials:t.getCredentials()||[],addCredActive:!1,addCredInvalid:!1,newCred:"",previousOnTags:t.onTagsUpdated},this.tnNewTags=this.tnNewTags.bind(this),this.tnCredsUpdated=this.tnCredsUpdated.bind(this),this.handleFullNameUpdate=this.handleFullNameUpdate.bind(this),this.handleImageChanged=this.handleImageChanged.bind(this),this.handleCredChange=this.handleCredChange.bind(this),this.handleCredKeyDown=this.handleCredKeyDown.bind(this),this.handleCredEntered=this.handleCredEntered.bind(this),this.handleTagsUpdated=this.handleTagsUpdated.bind(this)}componentDidMount(){const e=this.props.tinode.getMeTopic();e.onCredsUpdated=this.tnCredsUpdated,e.onTagsUpdated=this.tnNewTags}componentWillUnmount(){const e=this.props.tinode.getMeTopic();e.onTagsUpdated=this.state.previousOnTags,e.onCredsUpdated=void 0}tnNewTags(e){this.setState({tags:e})}tnCredsUpdated(e){this.setState({credentials:e||[]})}handleFullNameUpdate(e){(e=e.trim().substring(0,w))&&(this.setState({fullName:e}),this.props.onUpdateAccount(void 0,oe(e,null)))}handleImageChanged(e){this.setState({avatar:e}),this.props.onUpdateAccount(void 0,oe(null,e||c().DEL_CHAR))}handleCredChange(e){this.setState({newCred:e.target.value,addCredInvalid:!1})}handleCredKeyDown(e){27===e.keyCode?this.setState({newCred:"",addCredActive:!1}):13===e.keyCode&&this.handleCredEntered(e)}handleCredEntered(e){let t=this.state.newCred.trim();if(!t)return void this.setState({addCredActive:!1,addCredInvalid:!1});let s,a=function(e){return e=e.trim(),/^(?:\+?(\d{1,3}))?[- (.]*(\d{3})[- ).]*(\d{3})[- .]*(\d{2})[- .]*(\d{2})?$/.test(e)?e.replace(/[- ().]*/,""):null}(t);a?s="tel":(a=function(e){return e=e.trim(),/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/.test(e)?e:null}(t),a&&(s="email")),s?(this.props.onCredAdd(s,a),this.setState({addCredActive:!1,newCred:""})):this.setState({addCredInvalid:!0})}handleTagsUpdated(e){le(this.state.tags.slice(0),e.slice(0))||this.props.onUpdateTags(e)}render(){const e=[];return this.state.credentials.map((t=>{e.push(s().createElement("div",{key:t.meth+":"+t.val+":"+t.done},t.meth,": ",s().createElement("tt",null,t.val),s().createElement("span",null," ",t.done?null:s().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onCredConfirm(t.meth,t.val)}},s().createElement(n.FormattedMessage,{id:"validate_credential_action",defaultMessage:[{type:0,value:"confirm"}]}))," ",s().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onCredDelete(t.meth,t.val)}},s().createElement("i",{className:"material-icons gray"},"delete_outline")))))})),s().createElement("div",{className:"scrollable-panel"},s().createElement("div",{className:"panel-form-row"},s().createElement("div",{className:"panel-form-column"},s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_your_name",defaultMessage:[{type:0,value:"Your name"}]})),s().createElement("div",null,s().createElement(n.FormattedMessage,{id:"full_name_prompt",defaultMessage:[{type:0,value:"Full name, e.g. John Doe"}]},(e=>s().createElement(ee,{placeholder:e,value:this.state.fullName,onFinished:this.handleFullNameUpdate}))))),s().createElement(x,{avatar:this.state.avatar,uid:this.props.myUserId,title:this.state.fullName,onImageChanged:this.handleImageChanged,onError:this.props.onError})),s().createElement("div",{className:"hr"}),s().createElement(n.FormattedMessage,{id:"title_tag_manager",defaultMessage:[{type:0,value:"Tags (user discovery)"}]},(e=>s().createElement(ce,{title:e,activated:!1,tags:this.state.tags,tinode:this.props.tinode,onSubmit:this.handleTagsUpdated}))),s().createElement("div",{className:"hr"}),s().createElement("div",{className:"panel-form-column"},s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_user_contacts",defaultMessage:[{type:0,value:"Contacts:"}]})),s().createElement("div",{className:"quoted"},e,this.state.addCredActive?s().createElement("input",{type:"text",value:this.state.value,className:this.state.addCredInvalid?"invalid":null,placeholder:"Phone number or email",required:"required",autoFocus:!0,onChange:this.handleCredChange,onKeyDown:this.handleCredKeyDown,onBlur:this.handleCredEntered}):null,s().createElement("div",null,s().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.setState({addCredActive:!0})}},s().createElement("i",{className:"material-icons"},"add"),s().createElement(n.FormattedMessage,{id:"button_add_another",defaultMessage:[{type:0,value:"Add another"}]}))))))}}class Ge extends s().PureComponent{constructor(e){super(e),this.handleCheckboxClick=this.handleCheckboxClick.bind(this)}handleCheckboxClick(e,t){"sound"==e?this.props.onToggleMessageSounds(t):"alert"==e?this.props.onTogglePushNotifications(t):"incognito"==e&&this.props.onToggleIncognitoMode(t)}render(){return s().createElement("div",{className:"scrollable-panel"},s().createElement("div",{className:"panel-form-row"},s().createElement("label",{htmlFor:"message-sound"},s().createElement(n.FormattedMessage,{id:"label_message_sound",defaultMessage:[{type:0,value:"Message sound:"}]})),s().createElement(R,{name:"sound",id:"message-sound",checked:this.props.messageSounds,onChange:this.handleCheckboxClick})),s().createElement("div",{className:"panel-form-row"},s().createElement("label",{htmlFor:"desktop-alerts"},this.props.desktopAlertsEnabled?s().createElement(n.FormattedMessage,{id:"label_push_notifications",defaultMessage:[{type:0,value:"Notification alerts:"}]}):s().createElement(n.FormattedMessage,{id:"label_push_notifications_disabled",defaultMessage:[{type:0,value:"Notification alerts (requires HTTPS):"}]})),s().createElement(R,{name:"alert",id:"desktop-alerts",checked:this.props.desktopAlerts,onChange:this.props.desktopAlertsEnabled?this.handleCheckboxClick:null})),s().createElement("div",{className:"panel-form-row"},s().createElement("label",{htmlFor:"incognito-mode"},s().createElement(n.FormattedMessage,{id:"label_incognito_mode",defaultMessage:[{type:0,value:"Incognito mode:"}]})),s().createElement(R,{name:"incognito",id:"incognito-mode",checked:this.props.incognitoMode,onChange:this.handleCheckboxClick})))}}const Je=(0,n.defineMessages)({delete_account:{id:"delete_account",defaultMessage:[{type:0,value:"Delete account"}]},delete_account_warning:{id:"delete_account_arning",defaultMessage:[{type:0,value:"Are you sure you want to delete your account? It cannot be undone."}]}});class Qe extends s().Component{constructor(e){super(e);const t=this.props.tinode.getMeTopic();let s=0;t.contacts((e=>{e.acs&&!e.acs.isJoiner()&&s++}));const a=t.getDefaultAccess();this.state={auth:a?a.auth:null,anon:a?a.anon:null,showPermissionEditorFor:void 0,blockedCount:s},this.handlePasswordUpdate=this.handlePasswordUpdate.bind(this),this.handleLaunchPermissionsEditor=this.handleLaunchPermissionsEditor.bind(this),this.handleHidePermissionsEditor=this.handleHidePermissionsEditor.bind(this),this.handlePermissionsChanged=this.handlePermissionsChanged.bind(this),this.handleDeleteAccount=this.handleDeleteAccount.bind(this)}handlePasswordUpdate(e){this.setState({password:e}),this.props.onUpdateAccount(e)}handleLaunchPermissionsEditor(e){this.setState({showPermissionEditorFor:e,editedPermissions:this.state[e]})}handleHidePermissionsEditor(){this.setState({showPermissionEditorFor:void 0})}handlePermissionsChanged(e){let t={};t[this.state.showPermissionEditorFor]=e,this.props.onUpdateAccount(void 0,void 0,t);let s={showPermissionEditorFor:void 0};s[this.state.showPermissionEditorFor]=e,this.setState(s)}handleDeleteAccount(e){e.preventDefault();const{formatMessage:t}=this.props.intl;this.props.onShowAlert(t(Je.delete_account),t(Je.delete_account_warning),(()=>{this.props.onDeleteAccount()}),null,!0,null)}render(){return s().createElement(s().Fragment,null,this.state.showPermissionEditorFor?s().createElement(ie,{mode:this.state.editedPermissions,skip:"O",onSubmit:this.handlePermissionsChanged,onCancel:this.handleHidePermissionsEditor}):s().createElement("div",{className:"scrollable-panel"},s().createElement("div",{className:"panel-form-column"},s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_password",defaultMessage:[{type:0,value:"Password"}]})),s().createElement("div",null,s().createElement(n.FormattedMessage,{id:"password_unchanged_prompt",defaultMessage:[{type:0,value:"Unchanged"}]},(e=>s().createElement(ee,{placeholder:e,type:"password",onFinished:this.handlePasswordUpdate}))))),s().createElement("div",{className:"hr"}),s().createElement("div",{className:"panel-form-column"},s().createElement("a",{href:"#",className:"red flat-button",onClick:e=>{e.preventDefault(),this.props.onLogout()}},s().createElement("i",{className:"material-icons"},"exit_to_app")," ",s().createElement(n.FormattedMessage,{id:"button_logout",defaultMessage:[{type:0,value:"Logout"}]})),s().createElement("a",{href:"#",className:"red flat-button",onClick:e=>{this.handleDeleteAccount(e)}},s().createElement("i",{className:"material-icons"},"delete")," ",s().createElement(n.FormattedMessage,{id:"button_delete_account",defaultMessage:[{type:0,value:"Delete account"}]}))),s().createElement("div",{className:"hr"}),s().createElement("div",{className:"panel-form-column"},s().createElement("div",null,s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_default_access_mode",defaultMessage:[{type:0,value:"Default access mode:"}]}))),s().createElement("div",{className:"quoted"},s().createElement("div",null,"Auth: ",s().createElement("tt",{className:"clickable",onClick:this.handleLaunchPermissionsEditor.bind(this,"auth")},this.state.auth)),s().createElement("div",null,"Anon: ",s().createElement("tt",{className:"clickable",onClick:this.handleLaunchPermissionsEditor.bind(this,"anon")},this.state.anon)))),this.state.blockedCount>0?s().createElement(s().Fragment,null,s().createElement("div",{className:"hr"}),s().createElement("div",{className:"panel-form-row"},s().createElement("i",{className:"material-icons"},"block")," ",s().createElement("a",{href:"#",className:"gray",onClick:e=>{e.preventDefault(),this.props.onShowBlocked()}},s().createElement(n.FormattedMessage,{id:"blocked_contacts_link",defaultMessage:[{type:0,value:"Blocked contacts ("},{type:1,value:"count"},{type:0,value:")"}],values:{count:this.state.blockedCount}})))):null))}}var Ye=(0,n.injectIntl)(Qe);class Ze extends s().PureComponent{render(){return s().createElement("div",{className:"scrollable-panel"},s().createElement("div",{className:"panel-form-column"},s().createElement("a",{href:"email:info@tinode.co",className:"flat-button",target:"_blank"},s().createElement("i",{className:"material-icons"},"email")," ",s().createElement(n.FormattedMessage,{id:"link_contact_us",defaultMessage:[{type:0,value:"Contact Us"}]})),s().createElement("a",{href:"https://tinode.co/terms.html",className:"flat-button",target:"_blank"},s().createElement("i",{className:"material-icons"},"description")," ",s().createElement(n.FormattedMessage,{id:"link_terms_of_service",defaultMessage:[{type:0,value:"Terms of Service"}]})),s().createElement("a",{href:"https://tinode.co/privacy.html",className:"flat-button",target:"_blank"},s().createElement("i",{className:"material-icons"},"policy")," ",s().createElement(n.FormattedMessage,{id:"link_privacy_policy",defaultMessage:[{type:0,value:"Privacy Policy"}]}))),s().createElement("div",{className:"hr"}),s().createElement("div",{className:"panel-form-column"},s().createElement("div",{className:"panel-form-row"},s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_client",defaultMessage:[{type:0,value:"Client:"}]})),h),s().createElement("div",{className:"panel-form-row"},s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_sdk",defaultMessage:[{type:0,value:"SDK:"}]})),c().getLibrary()),s().createElement("div",{className:"panel-form-row"},s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_server",defaultMessage:[{type:0,value:"Server:"}]})),this.props.serverVersion),s().createElement("div",{className:"panel-form-row"},s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_server_address",defaultMessage:[{type:0,value:"Server address:"}]})),this.props.serverAddress)))}}class Xe extends s().Component{constructor(e){super(e),this.state={login:e.login,password:"",hostName:e.serverAddress,saveToken:He.getObject("keep-logged-in")},this.handleLoginChange=this.handleLoginChange.bind(this),this.handlePasswordChange=this.handlePasswordChange.bind(this),this.handleToggleSaveToken=this.handleToggleSaveToken.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}handleLoginChange(e){this.setState({login:e.target.value})}handlePasswordChange(e){this.setState({password:e.target.value})}handleToggleSaveToken(){He.setObject("keep-logged-in",!this.state.saveToken),this.setState({saveToken:!this.state.saveToken})}handleSubmit(e){e.preventDefault(),this.props.onLogin(this.state.login.trim(),this.state.password.trim())}render(){var e="blue";return this.props.disabled&&(e+=" disabled"),s().createElement("form",{id:"login-form",onSubmit:this.handleSubmit},s().createElement(n.FormattedMessage,{id:"login_prompt",defaultMessage:[{type:0,value:"Login"}]},(e=>s().createElement("input",{type:"text",id:"inputLogin",placeholder:e,autoComplete:"username",autoCorrect:"off",autoCapitalize:"none",value:this.state.login,onChange:this.handleLoginChange,required:!0,autoFocus:!0}))),s().createElement(n.FormattedMessage,{id:"password_prompt",defaultMessage:[{type:0,value:"Password"}]},(e=>s().createElement($,{type:"password",id:"inputPassword",placeholder:e,autoComplete:"current-password",value:this.state.password,onChange:this.handlePasswordChange,required:!0}))),s().createElement("div",{className:"panel-form-row"},s().createElement(R,{id:"save-token",name:"save-token",checked:this.state.saveToken,onChange:this.handleToggleSaveToken}),s().createElement("label",{htmlFor:"save-token"}," ",s().createElement(n.FormattedMessage,{id:"stay_logged_in",defaultMessage:[{type:0,value:"Stay logged in"}]})),s().createElement("a",{href:"#reset"},s().createElement(n.FormattedMessage,{id:"forgot_password_link",defaultMessage:[{type:0,value:"Forgot password?"}]}))),s().createElement("div",{className:"dialog-buttons"},s().createElement("button",{className:e,type:"submit"},s().createElement(n.FormattedMessage,{id:"button_sign_in",defaultMessage:[{type:0,value:"Sign in"}]}))))}}const $e=(0,n.defineMessages)({invalid_id:{id:"error_invalid_id",defaultMessage:[{type:0,value:"Invalid ID"}]}});class et extends s().PureComponent{constructor(e){super(e),this.state={groupId:""},this.handleChange=this.handleChange.bind(this),this.handleKeyPress=this.handleKeyPress.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}handleChange(e){this.setState({groupId:e.target.value})}handleKeyPress(e){"Enter"===e.key&&this.handleSubmit(e)}handleSubmit(e){if(e.preventDefault(),this.state.groupId){var t=this.state.groupId.trim();t.length>3&&("usr"==t.substr(0,3)||"grp"==t.substr(0,3))?this.props.onSubmit(t):this.props.onError(this.props.intl.formatMessage($e.invalid_id),"err")}}render(){return s().createElement("div",{className:"panel-form"},s().createElement("div",{className:"panel-form-row"},s().createElement(n.FormattedMessage,{id:"group_user_id_prompt",defaultMessage:[{type:0,value:"Group or User ID"}]},(e=>s().createElement("input",{type:"text",placeholder:e,value:this.state.groupId,onChange:this.handleChange,onKeyPress:this.handleKeyPress,required:!0,autoFocus:!0})))),s().createElement("div",{className:"dialog-buttons"},s().createElement("button",{className:"blue",onClick:this.handleSubmit},s().createElement(n.FormattedMessage,{id:"button_subscribe",defaultMessage:[{type:0,value:"Subscribe"}]}))))}}var tt=(0,n.injectIntl)(et);class st extends s().PureComponent{constructor(e){super(e),this.state={fn:"",private:"",imageDataUrl:null,tags:[],isChannel:!1},this.handleFnChange=this.handleFnChange.bind(this),this.handlePrivateChange=this.handlePrivateChange.bind(this),this.handleImageChanged=this.handleImageChanged.bind(this),this.handleTagsChanged=this.handleTagsChanged.bind(this),this.handleChannelToggle=this.handleChannelToggle.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}handleFnChange(e){this.setState({fn:e.target.value})}handlePrivateChange(e){this.setState({private:e.target.value})}handleImageChanged(e){this.setState({imageDataUrl:e})}handleTagsChanged(e){this.setState({tags:e})}handleChannelToggle(){this.setState({isChannel:!this.state.isChannel})}handleSubmit(e){e.preventDefault();const t=this.state.fn.trim().substring(0,w),s=this.state.private.trim().substring(0,w);t&&this.props.onSubmit(t,this.state.imageDataUrl,s,this.state.tags,this.state.isChannel)}render(){var e="blue";return this.props.disabled&&(e+=" disabled"),s().createElement("form",{className:"panel-form",onSubmit:this.handleSubmit},s().createElement("div",{className:"panel-form-row"},s().createElement("div",{className:"panel-form-column"},s().createElement("label",{className:"small",htmlFor:"new-topic-fn"},s().createElement(n.FormattedMessage,{id:"label_topic_name",defaultMessage:[{type:0,value:"Name"}]})),s().createElement(n.FormattedMessage,{id:"topic_name_editing_placeholder",defaultMessage:[{type:0,value:"Freeform name of the group"}]},(e=>s().createElement("input",{type:"text",id:"new-topic-fn",placeholder:e,value:this.state.fn,onChange:this.handleFnChange,autoFocus:!0,required:!0}))),s().createElement("br",null),s().createElement("label",{className:"small",htmlFor:"new-topic-priv"},s().createElement(n.FormattedMessage,{id:"label_private",defaultMessage:[{type:0,value:"Private comment"}]})),s().createElement(n.FormattedMessage,{id:"private_editing_placeholder",defaultMessage:[{type:0,value:"Visible to you only"}]},(e=>s().createElement("input",{type:"text",id:"new-topic-priv",placeholder:e,value:this.state.private,onChange:this.handlePrivateChange})))),s().createElement(x,{onError:this.props.onError,onImageChanged:this.handleImageChanged})),s().createElement("div",{className:"panel-form-row"},s().createElement(R,{checked:this.state.isChannel,onChange:this.handleChannelToggle})," ",s().createElement("label",{onClick:this.handleChannelToggle},s().createElement(n.FormattedMessage,{id:"channel_prompt",defaultMessage:[{type:0,value:"This is a channel"}]}))),s().createElement(n.FormattedMessage,{id:"title_tag_manager",defaultMessage:[{type:0,value:"Tags (user discovery)"}]},(e=>s().createElement(ce,{tags:this.state.tags,activated:!0,onTagsChanged:this.handleTagsChanged,tinode:this.props.tinode,title:e}))),s().createElement("div",{className:"dialog-buttons"},s().createElement("button",{className:e},s().createElement(n.FormattedMessage,{id:"button_create",defaultMessage:[{type:0,value:"Create"}]}))))}}class at extends s().PureComponent{constructor(e){super(e),this.state={edited:!1,search:""},this.handleSearchChange=this.handleSearchChange.bind(this),this.handleSearch=this.handleSearch.bind(this),this.handleClear=this.handleClear.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}componentWillUnmount(){this.state.edited&&(this.setState({search:"",edited:!1}),this.props.onSearchContacts(c().DEL_CHAR))}handleSearchChange(e){this.setState({search:e.target.value})}handleSearch(e){e.preventDefault();var t=this.state.search.trim();this.setState({edited:t.length>0}),this.props.onSearchContacts(t.length>0?t:c().DEL_CHAR)}handleClear(e){e.preventDefault(),this.state.edited&&this.props.onSearchContacts(c().DEL_CHAR),this.setState({search:"",edited:!1})}handleKeyDown(e){"Enter"===e.key?this.handleSearch(e):"Escape"===e.key&&this.handleClear()}render(){return s().createElement("div",{className:"panel-form"},s().createElement("div",{className:"panel-form-row"},s().createElement("i",{className:"material-icons search"},"search"),s().createElement(n.FormattedMessage,{id:"search_placeholder",defaultMessage:[{type:0,value:"List like email:alice@example.com, tel:17025550003..."}]},(e=>s().createElement("input",{className:"search",type:"text",placeholder:e,value:this.state.search,onChange:this.handleSearchChange,onKeyDown:this.handleKeyDown,required:!0,autoFocus:!0}))),s().createElement("a",{href:"#",onClick:this.handleClear},s().createElement("i",{className:"material-icons"},"close"))))}}const it=(0,n.defineMessages)({search_for_contacts:{id:"search_for_contacts",defaultMessage:[{type:0,value:"Use search to find contacts"}]},search_no_results:{id:"search_no_results",defaultMessage:[{type:0,value:"Search returned no results"}]}});class nt extends s().Component{constructor(e){super(e),this.state={tabSelected:"p2p",searchQuery:null},this.handleTabClick=this.handleTabClick.bind(this),this.handleSearchContacts=this.handleSearchContacts.bind(this),this.handleContactSelected=this.handleContactSelected.bind(this),this.handleNewGroupSubmit=this.handleNewGroupSubmit.bind(this),this.handleGroupByID=this.handleGroupByID.bind(this)}componentDidMount(){this.props.onInitFind()}handleTabClick(e){e.preventDefault(),Pe.navigateTo(Pe.addUrlParam(window.location.hash,"tab",e.currentTarget.dataset.id)),this.setState({tabSelected:e.currentTarget.dataset.id})}handleSearchContacts(e){this.props.onSearchContacts(e),this.setState({searchQuery:c().isNullValue(e)?null:e})}handleContactSelected(e){"p2p"===this.state.tabSelected&&(Pe.navigateTo(Pe.removeUrlParam(window.location.hash,"tab")),this.props.onCreateTopic(e))}handleNewGroupSubmit(e,t,s,a,i){Pe.navigateTo(Pe.removeUrlParam(window.location.hash,"tab")),this.props.onCreateTopic(void 0,oe(e,t),s,a,i)}handleGroupByID(e){Pe.navigateTo(Pe.removeUrlParam(window.location.hash,"tab")),this.props.onCreateTopic(e)}render(){const{formatMessage:e}=this.props.intl,t=e(this.state.searchQuery?it.search_no_results:it.search_for_contacts);return s().createElement("div",{className:"flex-column"},s().createElement("ul",{className:"tabbar"},s().createElement("li",{className:"p2p"===this.state.tabSelected?"active":null},s().createElement("a",{href:"#","data-id":"p2p",onClick:this.handleTabClick},s().createElement(n.FormattedMessage,{id:"tabtitle_find_user",defaultMessage:[{type:0,value:"find"}]}))),s().createElement("li",{className:"grp"===this.state.tabSelected?"active":null},s().createElement("a",{href:"#","data-id":"grp",onClick:this.handleTabClick},s().createElement(n.FormattedMessage,{id:"tabtitle_new_group",defaultMessage:[{type:0,value:"new group"}]}))),s().createElement("li",{className:"byid"===this.state.tabSelected?"active":null},s().createElement("a",{href:"#","data-id":"byid",onClick:this.handleTabClick},s().createElement(n.FormattedMessage,{id:"tabtitle_group_by_id",defaultMessage:[{type:0,value:"by id"}]})))),"grp"===this.state.tabSelected?s().createElement(st,{tinode:this.props.tinode,onSubmit:this.handleNewGroupSubmit}):"byid"===this.state.tabSelected?s().createElement(tt,{onSubmit:this.handleGroupByID,onError:this.props.onError}):s().createElement("div",{className:"flex-column"},s().createElement(at,{type:"p2p",onSearchContacts:this.handleSearchContacts}),s().createElement(W,{contacts:this.props.searchResults,myUserId:this.props.myUserId,emptyListMessage:t,showOnline:!1,showUnread:!1,showContextMenu:!1,onTopicSelected:this.handleContactSelected})))}}var ot=(0,n.injectIntl)(nt);class lt extends s().PureComponent{constructor(e){super(e),this.state={email:"",password:""},this.handleSubmit=this.handleSubmit.bind(this),this.handleEmailChange=this.handleEmailChange.bind(this),this.handlePasswordChange=this.handlePasswordChange.bind(this)}componentDidMount(){let e=Pe.parseUrlHash(window.location.hash);this.setState({token:e.params.token,scheme:e.params.scheme})}handleSubmit(e){e.preventDefault(),this.state.token?this.props.onReset(this.state.scheme,this.state.password.trim(),this.state.token):this.props.onRequest("email",this.state.email.trim())}handleEmailChange(e){this.setState({email:e.target.value})}handlePasswordChange(e){this.setState({password:e.target.value})}render(){let e=this.state.token&&this.state.scheme;return s().createElement("form",{id:"password-reset-form",onSubmit:this.handleSubmit},e?s().createElement(n.FormattedMessage,{id:"new_password_placeholder",defaultMessage:[{type:0,value:"Enter new password"}]},(e=>s().createElement($,{placeholder:e,autoComplete:"new-password",value:this.state.password,required:!0,autoFocus:!0,onChange:this.handlePasswordChange}))):s().createElement(s().Fragment,null,s().createElement("label",{htmlFor:"inputEmail"},s().createElement(n.FormattedMessage,{id:"label_reset_password",defaultMessage:[{type:0,value:"Send a password reset email:"}]})),s().createElement(n.FormattedMessage,{id:"credential_email_prompt",defaultMessage:[{type:0,value:"Your registration email"}]},(e=>s().createElement("input",{type:"email",id:"inputEmail",placeholder:e,autoComplete:"email",value:this.state.email,onChange:this.handleEmailChange,required:!0,autoFocus:!0})))),s().createElement("div",{className:"dialog-buttons"},s().createElement("button",{className:"blue",type:"submit"},e?s().createElement(n.FormattedMessage,{id:"button_reset",defaultMessage:[{type:0,value:"Reset"}]}):s().createElement(n.FormattedMessage,{id:"button_send_request",defaultMessage:[{type:0,value:"Send request"}]}))))}}class rt extends s().PureComponent{constructor(e){super(e),this.state={hostName:e.serverAddress,changed:!1},this.handleHostNameChange=this.handleHostNameChange.bind(this),this.handleEditingFinished=this.handleEditingFinished.bind(this)}handleHostNameChange(e){this.setState({hostName:e.target.value,changed:!0})}handleEditingFinished(){this.state.changed&&(this.setState({changed:!1}),this.props.onServerAddressChange(this.state.hostName.trim()))}render(){var e=[];for(let t in p){let a=p[t];e.push(s().createElement("option",{key:a,value:a}))}return s().createElement("div",{className:"panel-form-row"},s().createElement("input",{type:"search",id:"host-name",placeholder:this.props.hostName,list:"known-hosts",className:"quoted",value:this.state.hostName,onChange:this.handleHostNameChange,onBlur:this.handleEditingFinished,required:!0}),s().createElement("datalist",{id:"known-hosts"},e))}}class ct extends s().PureComponent{constructor(e){super(e),this.state={transport:e.transport||"def",serverAddress:e.serverAddress},this.handleSubmit=this.handleSubmit.bind(this),this.handleTransportSelected=this.handleTransportSelected.bind(this),this.handleServerAddressChange=this.handleServerAddressChange.bind(this)}handleSubmit(e){e.preventDefault(),this.props.onUpdate({transport:this.state.transport,serverAddress:this.state.serverAddress})}handleTransportSelected(e){this.setState({transport:e.currentTarget.value})}handleServerAddressChange(e){this.setState({serverAddress:e})}render(){const e={def:"default",ws:"websocket",lp:"long polling"};var t=[],a=this;return["def","ws","lp"].map((function(i){var n="transport-"+i,o=e[i];t.push(s().createElement("li",{key:i},s().createElement("input",{type:"radio",id:n,name:"transport-select",value:i,checked:a.state.transport===i,onChange:a.handleTransportSelected}),s().createElement("label",{htmlFor:n},o)))})),s().createElement("form",{id:"settings-form",className:"panel-form",onSubmit:this.handleSubmit},s().createElement("div",{className:"panel-form-row"},s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_server_to_use",defaultMessage:[{type:0,value:"Server to use:"}]}))),s().createElement(rt,{serverAddress:this.state.serverAddress,onServerAddressChange:this.handleServerAddressChange}),s().createElement("div",{className:"panel-form-row"},s().createElement("label",{className:"small"},s().createElement(n.FormattedMessage,{id:"label_wire_transport",defaultMessage:[{type:0,value:"Wire transport:"}]}))),s().createElement("div",{className:"panel-form-row"},s().createElement("ul",{className:"quoted"},t)),s().createElement("div",{className:"dialog-buttons"},s().createElement("button",{type:"submit",className:"blue"},s().createElement(n.FormattedMessage,{id:"button_update",defaultMessage:[{type:0,value:"Update"}]}))))}}const dt=(0,n.defineMessages)({phone:{id:"phone_dative",defaultMessage:[{type:0,value:"phone"}]},email:{id:"email_dative",defaultMessage:[{type:0,value:"email"}]}});class ht extends s().PureComponent{constructor(e){super(e),this.state={code:e.credCode||""},this.handleChange=this.handleChange.bind(this),this.handleKeyPress=this.handleKeyPress.bind(this),this.handleSubmit=this.handleSubmit.bind(this),this.handleCancel=this.handleCancel.bind(this)}handleChange(e){this.setState({code:e.target.value})}handleKeyPress(e){"Enter"===e.key?this.handleSubmit(e):"Escape"==e.key&&this.handleCancel(e)}handleSubmit(e){e.preventDefault(),this.state.code&&this.state.code.trim()&&this.props.onSubmit(this.props.credMethod,this.state.code.trim())}handleCancel(e){e.preventDefault(),this.props.onCancel()}render(){const{formatMessage:e}=this.props.intl;let t={email:e(dt.email),tel:e(dt.phone)}[this.props.credMethod]||this.props.credMethod;return s().createElement("div",{className:"panel-form"},s().createElement("div",{className:"panel-form-row"},s().createElement("label",{className:"small",htmlFor:"enter-confirmation-code"},s().createElement(n.FormattedMessage,{id:"enter_confirmation_code_prompt",defaultMessage:[{type:0,value:"Enter confirmation code sent to you by "},{type:1,value:"method"},{type:0,value:":"}],values:{method:t}}))),s().createElement("div",{className:"panel-form-row"},s().createElement(n.FormattedMessage,{id:"numeric_confirmation_code_prompt",defaultMessage:[{type:0,value:"Numbers only"}]},(e=>s().createElement("input",{type:"text",id:"enter-confirmation-code",placeholder:e,value:this.state.code,onChange:this.handleChange,onKeyPress:this.handleKeyPress,required:!0})))),s().createElement("div",{className:"dialog-buttons"},s().createElement("button",{className:"blue",onClick:this.handleSubmit},s().createElement(n.FormattedMessage,{id:"button_confirm",defaultMessage:[{type:0,value:"Confirm"}]})),s().createElement("button",{className:"white",onClick:this.handleCancel},s().createElement(n.FormattedMessage,{id:"button_cancel",defaultMessage:[{type:0,value:"Cancel"}]}))))}}var pt=(0,n.injectIntl)(ht);const mt=(0,n.defineMessages)({login:{id:"sidepanel_title_login",defaultMessage:[{type:0,value:"Sign In"}]},register:{id:"sidepanel_title_register",defaultMessage:[{type:0,value:"Create Account"}]},settings:{id:"sidepanel_title_settings",defaultMessage:[{type:0,value:"Settings"}]},edit:{id:"sidepanel_title_account_settings",defaultMessage:[{type:0,value:"Account Settings"}]},general:{id:"sidepanel_title_acc_general",defaultMessage:[{type:0,value:"General"}]},security:{id:"sidepanel_title_acc_security",defaultMessage:[{type:0,value:"Security"}]},notif:{id:"sidepanel_title_acc_notifications",defaultMessage:[{type:0,value:"Notifications"}]},support:{id:"sidepanel_title_acc_support",defaultMessage:[{type:0,value:"Support"}]},newtpk:{id:"sidepanel_title_newtpk",defaultMessage:[{type:0,value:"Start New Chat"}]},cred:{id:"sidepanel_title_cred",defaultMessage:[{type:0,value:"Confirm Credentials"}]},reset:{id:"sidepanel_title_reset",defaultMessage:[{type:0,value:"Reset Password"}]},archive:{id:"sidepanel_title_archive",defaultMessage:[{type:0,value:"Archived Chats"}]},blocked:{id:"sidepanel_title_blocked",defaultMessage:[{type:0,value:"Blocked Chats"}]}});class ut extends s().Component{constructor(e){super(e),this.handleLoginRequested=this.handleLoginRequested.bind(this),this.handleNewTopic=this.handleNewTopic.bind(this)}handleLoginRequested(e,t){this.props.onLoginRequest(e,t)}handleNewTopic(){this.props.onBasicNavigate("newtpk")}render(){const{formatMessage:e}=this.props.intl,t=this.props.state||(this.props.myUserId?"contacts":"login");let a,i,n;return"contacts"==t?(a=this.props.title,i=!this.props.avatar||this.props.avatar):(a=e(mt[t]),i=!1),-1==["login","contacts"].indexOf(t)&&(n=this.props.onCancel),s().createElement("div",{id:"sidepanel",className:this.props.hideSelf?"nodisplay":null},s().createElement(Be,{state:t,title:a,avatar:i,myUserId:this.props.myUserId,onSignUp:this.props.onSignUp,onSettings:this.props.onSettings,onNewTopic:this.handleNewTopic,onCancel:n}),s().createElement(G,{level:this.props.errorLevel,text:this.props.errorText,action:this.props.errorAction,actionText:this.props.errorActionText,onClearError:this.props.onError}),s().createElement(Te,{show:this.props.loadSpinnerVisible}),"login"===t?s().createElement(Xe,{login:this.props.login,disabled:this.props.loginDisabled,onLogin:this.handleLoginRequested}):"register"===t?s().createElement(Ke,{onCreateAccount:this.props.onCreateAccount,onCancel:this.props.onCancel,onError:this.props.onError}):"settings"===t?s().createElement(ct,{transport:this.props.transport,serverAddress:this.props.serverAddress,onCancel:this.props.onCancel,onUpdate:this.props.onGlobalSettings}):"edit"===t?s().createElement(We,{tinode:this.props.tinode,myUserId:this.props.myUserId,onBasicNavigate:this.props.onBasicNavigate}):"general"===t?s().createElement(Ve,{tinode:this.props.tinode,myUserId:this.props.myUserId,onUpdateAccount:this.props.onUpdateAccount,onUpdateTags:this.props.onUpdateAccountTags,onCredAdd:this.props.onCredAdd,onCredDelete:this.props.onCredDelete,onCredConfirm:this.props.onCredConfirm,onBasicNavigate:this.props.onBasicNavigate,onError:this.props.onError}):"notif"===t?s().createElement(Ge,{messageSounds:this.props.messageSounds,desktopAlerts:this.props.desktopAlerts,desktopAlertsEnabled:this.props.desktopAlertsEnabled,incognitoMode:this.props.incognitoMode,onTogglePushNotifications:this.props.onTogglePushNotifications,onToggleMessageSounds:this.props.onToggleMessageSounds,onToggleIncognitoMode:this.props.onToggleIncognitoMode}):"security"===t?s().createElement(Ye,{tinode:this.props.tinode,onUpdateAccount:this.props.onUpdateAccount,onLogout:this.props.onLogout,onDeleteAccount:this.props.onDeleteAccount,onShowAlert:this.props.onShowAlert,onShowBlocked:this.props.onShowBlocked}):"support"===t?s().createElement(Ze,{serverAddress:this.props.serverAddress,serverVersion:this.props.serverVersion}):"contacts"===t||"archive"==t||"blocked"==t?s().createElement(je,{tinode:this.props.tinode,myUserId:this.props.myUserId,connected:this.props.connected,topicSelected:this.props.topicSelected,archive:"archive"==t,blocked:"blocked"==t,chatList:this.props.chatList,showContextMenu:this.props.showContextMenu,onTopicSelected:this.props.onTopicSelected,onShowArchive:this.props.onShowArchive}):"newtpk"===t?s().createElement(ot,{tinode:this.props.tinode,searchResults:this.props.searchResults,onInitFind:this.props.onInitFind,onSearchContacts:this.props.onSearchContacts,onCreateTopic:this.props.onCreateTopic,onError:this.props.onError}):"cred"===t?s().createElement(pt,{credCode:this.props.credCode,credMethod:this.props.credMethod,onSubmit:this.props.onValidateCredentials,onCancel:this.props.onCancel,onError:this.props.onError}):"reset"===t?s().createElement(lt,{onRequest:this.props.onPasswordResetRequest,onReset:this.props.onResetPassword}):null)}}var _t=(0,n.injectIntl)(ut);function gt(){let e=m;return"object"==typeof window.location&&("file:"==window.location.protocol||"localhost"==window.location.hostname?e=p.local:window.location.hostname&&(e=window.location.hostname+(window.location.port?":"+window.location.port:""))),e}function bt(){return"object"==typeof window.location&&"https:"==window.location.protocol}const vt=new Audio("audio/msg.mp3"),ft=(0,n.defineMessages)({reconnect_countdown:{id:"reconnect_countdown",defaultMessage:[{type:0,value:"Disconnected. Reconnecting in "},{type:1,value:"seconds"},{type:0,value:"…"}]},reconnect_now:{id:"reconnect_now",defaultMessage:[{type:0,value:"Try now"}]},push_init_failed:{id:"push_init_failed",defaultMessage:[{type:0,value:"Failed to initialize push notifications"}]},invalid_security_token:{id:"invalid_security_token",defaultMessage:[{type:0,value:"Invalid security token"}]},no_connection:{id:"no_connection",defaultMessage:[{type:0,value:"No connection"}]},code_doesnot_match:{id:"code_doesnot_match",defaultMessage:[{type:0,value:"Code does not match"}]},menu_item_info:{id:"menu_item_info",defaultMessage:[{type:0,value:"Info"}]}});class Et extends s().Component{constructor(e){super(e),this.state=this.getBlankState(),this.handleResize=this.handleResize.bind(this),this.handleHashRoute=this.handleHashRoute.bind(this),this.handleOnline=this.handleOnline.bind(this),this.checkForAppUpdate=this.checkForAppUpdate.bind(this),this.handleVisibilityEvent=this.handleVisibilityEvent.bind(this),this.handleError=this.handleError.bind(this),this.handleLoginRequest=this.handleLoginRequest.bind(this),this.handleConnected=this.handleConnected.bind(this),this.handleAutoreconnectIteration=this.handleAutoreconnectIteration.bind(this),this.doLogin=this.doLogin.bind(this),this.handleCredentialsRequest=this.handleCredentialsRequest.bind(this),this.handleLoginSuccessful=this.handleLoginSuccessful.bind(this),this.handleDisconnect=this.handleDisconnect.bind(this),this.tnMeMetaDesc=this.tnMeMetaDesc.bind(this),this.tnMeContactUpdate=this.tnMeContactUpdate.bind(this),this.tnMeSubsUpdated=this.tnMeSubsUpdated.bind(this),this.resetContactList=this.resetContactList.bind(this),this.tnData=this.tnData.bind(this),this.tnInitFind=this.tnInitFind.bind(this),this.tnFndSubsUpdated=this.tnFndSubsUpdated.bind(this),this.handleSearchContacts=this.handleSearchContacts.bind(this),this.handleTopicSelected=this.handleTopicSelected.bind(this),this.handleHideMessagesView=this.handleHideMessagesView.bind(this),this.handleSendMessage=this.handleSendMessage.bind(this),this.handleNewChatInvitation=this.handleNewChatInvitation.bind(this),this.handleNewAccount=this.handleNewAccount.bind(this),this.handleNewAccountRequest=this.handleNewAccountRequest.bind(this),this.handleUpdateAccountRequest=this.handleUpdateAccountRequest.bind(this),this.handleUpdateAccountTagsRequest=this.handleUpdateAccountTagsRequest.bind(this),this.handleToggleIncognitoMode=this.handleToggleIncognitoMode.bind(this),this.handleSettings=this.handleSettings.bind(this),this.handleGlobalSettings=this.handleGlobalSettings.bind(this),this.handleShowArchive=this.handleShowArchive.bind(this),this.handleShowBlocked=this.handleShowBlocked.bind(this),this.handleToggleMessageSounds=this.handleToggleMessageSounds.bind(this),this.handleCredAdd=this.handleCredAdd.bind(this),this.handleCredDelete=this.handleCredDelete.bind(this),this.handleCredConfirm=this.handleCredConfirm.bind(this),this.initDesktopAlerts=this.initDesktopAlerts.bind(this),this.togglePushToken=this.togglePushToken.bind(this),this.requestPushToken=this.requestPushToken.bind(this),this.handleSidepanelCancel=this.handleSidepanelCancel.bind(this),this.handleStartTopicRequest=this.handleStartTopicRequest.bind(this),this.handleNewTopicCreated=this.handleNewTopicCreated.bind(this),this.handleTopicUpdateRequest=this.handleTopicUpdateRequest.bind(this),this.handleChangePermissions=this.handleChangePermissions.bind(this),this.handleTagsUpdated=this.handleTagsUpdated.bind(this),this.handleLogout=this.handleLogout.bind(this),this.handleDeleteAccount=this.handleDeleteAccount.bind(this),this.handleDeleteMessagesRequest=this.handleDeleteMessagesRequest.bind(this),this.handleLeaveUnsubRequest=this.handleLeaveUnsubRequest.bind(this),this.handleBlockTopicRequest=this.handleBlockTopicRequest.bind(this),this.handleReportTopic=this.handleReportTopic.bind(this),this.handleShowContextMenu=this.handleShowContextMenu.bind(this),this.defaultTopicContextMenu=this.defaultTopicContextMenu.bind(this),this.handleHideContextMenu=this.handleHideContextMenu.bind(this),this.handleShowAlert=this.handleShowAlert.bind(this),this.handleShowInfoView=this.handleShowInfoView.bind(this),this.handleHideInfoView=this.handleHideInfoView.bind(this),this.handleMemberUpdateRequest=this.handleMemberUpdateRequest.bind(this),this.handleValidateCredentialsRequest=this.handleValidateCredentialsRequest.bind(this),this.handlePasswordResetRequest=this.handlePasswordResetRequest.bind(this),this.handleResetPassword=this.handleResetPassword.bind(this),this.handleContextMenuAction=this.handleContextMenuAction.bind(this)}getBlankState(){const e=He.getObject("settings")||{};return{connected:!1,ready:!1,autoLogin:!1,transport:e.transport||null,serverAddress:e.serverAddress||gt(),serverVersion:"no connection",messageSounds:!e.messageSoundsOff,incognitoMode:!1,desktopAlerts:e.desktopAlerts,desktopAlertsEnabled:(bt()||"object"==typeof window.location&&"localhost"==window.location.hostname)&&void 0!==l&&"undefined"!=typeof navigator&&"undefined"!=typeof FIREBASE_INIT,firebaseToken:He.getObject("firebase-token"),applicationVisible:!document.hidden,errorText:"",errorLevel:null,errorAction:void 0,errorActionText:null,sidePanelSelected:"login",sidePanelTitle:null,sidePanelAvatar:null,loadSpinnerVisible:!1,login:"",password:"",myUserId:null,liveConnection:navigator.onLine,topicSelected:"",topicSelectedOnline:!1,topicSelectedAcs:null,newTopicParams:null,loginDisabled:!1,displayMobile:window.innerWidth<=640,showInfoPanel:!1,mobilePanel:"sidepanel",contextMenuVisible:!1,contextMenuBounds:null,contextMenuClickAt:null,contextMenuParams:null,contextMenuItems:[],alertVisible:!1,alertParams:{},chatList:[],searchResults:[],searchableContacts:[],credMethod:void 0,credCode:void 0}}componentDidMount(){window.addEventListener("resize",this.handleResize),window.addEventListener("online",(e=>{this.handleOnline(!0)})),window.addEventListener("offline",(e=>{this.handleOnline(!1)})),window.addEventListener("hashchange",this.handleHashRoute),document.addEventListener("visibilitychange",this.handleVisibilityEvent),this.setState({viewportWidth:document.documentElement.clientWidth,viewportHeight:document.documentElement.clientHeight});const{formatMessage:e,locale:t}=this.props.intl;if(this.tinode=Et.tnSetup(this.state.serverAddress,this.state.transport,t),this.tinode.onConnect=this.handleConnected,this.tinode.onDisconnect=this.handleDisconnect,this.tinode.onAutoreconnectIteration=this.handleAutoreconnectIteration,this.state.desktopAlertsEnabled)try{this.fbPush=l.initializeApp(FIREBASE_INIT,h).messaging(),this.fbPush.usePublicVapidKey(FIREBASE_INIT.messagingVapidKey),navigator.serviceWorker.register("/service-worker.js").then((e=>{this.checkForAppUpdate(e),this.fbPush.useServiceWorker(e),e.active.postMessage(JSON.stringify({locale:t})),this.initDesktopAlerts(),this.state.desktopAlerts&&(this.state.firebaseToken?this.tinode.setDeviceToken(this.state.firebaseToken,!0):this.togglePushToken(!0))})).catch((e=>{console.log("Failed to register service worker:",e)}))}catch(t){this.handleError(e(ft.push_init_failed),"err"),console.log("Failed to initialize push notifications",t),this.setState({desktopAlertsEnabled:!1})}const s=He.getObject("keep-logged-in")?He.getObject("auth-token"):void 0,a=Pe.parseUrlHash(window.location.hash);s?(this.setState({autoLogin:!0}),s.expires=new Date(s.expires),this.tinode.setAuthToken(s),this.tinode.connect().catch((e=>{this.handleError(e.message,"err")})),delete a.params.info,delete a.params.tab,a.path[0]="",Pe.navigateTo(Pe.composeUrlHash(a.path,a.params))):a.params.token||Pe.navigateTo(""),this.readTimer=null,this.readTimerCallback=null,this.handleHashRoute()}componentWillUnmount(){window.removeEventListener("resize",this.handleResize),window.removeEventListener("hashchange",this.handleHashRoute),document.removeEventListener("visibilitychange",this.handleVisibilityEvent)}static tnSetup(e,t,s){const a=new(c())(h,e,"AQEAAAABAAD_rAp4DJh05a1HAwFT3A6K",t,bt());return a.setHumanLanguage(s),a.enableLogging(true,!0),a}handleResize(){const e=document.documentElement.clientWidth<=640;this.setState({viewportWidth:document.documentElement.clientWidth,viewportHeight:document.documentElement.clientHeight}),this.state.displayMobile!=e&&this.setState({displayMobile:e})}checkForAppUpdate(e){e.onupdatefound=()=>{const t=e.installing;t.onstatechange=()=>{if("installed"==t.state&&navigator.serviceWorker.controller){const e=s().createElement(s().Fragment,null,s().createElement(n.FormattedMessage,{id:"update_available",defaultMessage:[{type:0,value:"Update available."}]})," ",s().createElement("a",{href:""},s().createElement(n.FormattedMessage,{id:"reload_update",defaultMessage:[{type:0,value:"Reload"}]})),".");this.handleError(e,"info")}}}}handleHashRoute(){const e=Pe.parseUrlHash(window.location.hash);e.path&&e.path.length>0?(["register","settings","edit","notif","security","support","general","cred","reset","newtpk","archive","blocked","contacts",""].includes(e.path[0])?this.setState({sidePanelSelected:e.path[0]}):console.log("Unknown sidepanel view",e.path[0]),e.path.length>1&&e.path[1]!=this.state.topicSelected&&this.setState({topicSelected:c().topicType(e.path[1])?e.path[1]:null})):this.setState({sidePanelSelected:""}),e.params.method&&this.setState({credMethod:e.params.method}),e.params.code&&this.setState({credCode:e.params.code}),this.setState({showInfoPanel:e.params.info,newTopicTabSelected:e.params.tab})}handleOnline(e){e?this.handleError():this.handleError(this.props.intl.formatMessage(ft.no_connection),"warn"),this.setState({liveConnection:e})}handleVisibilityEvent(){this.setState({applicationVisible:!document.hidden})}handleError(e,t,s,a){this.setState({errorText:e,errorLevel:t,errorAction:s,errorActionText:a})}handleLoginRequest(e,t){this.setState({loginDisabled:!0,login:e,password:t,loadSpinnerVisible:!0,autoLogin:!0}),this.handleError("",null),this.tinode.isConnected()?this.doLogin(e,t,{meth:this.state.credMethod,resp:this.state.credCode}):this.tinode.connect().catch((e=>{this.setState({loginDisabled:!1,autoLogin:!1,loadSpinnerVisible:!1}),this.handleError(e.message,"err")}))}handleConnected(){const e=this.tinode.getServerInfo();this.setState({serverVersion:e.ver+" "+(e.build?e.build:"none")}),this.state.autoLogin&&this.doLogin(this.state.login,this.state.password,{meth:this.state.credMethod,resp:this.state.credCode})}handleAutoreconnectIteration(e,t){if(clearInterval(this.reconnectCountdown),e<0)return void this.handleError();if(t)return void t.then((()=>{this.handleError()})).catch((e=>{this.handleError(e.message,"err")}));const{formatMessage:s}=this.props.intl;let a=e/1e3;a|=a,this.reconnectCountdown=setInterval((()=>{const e=a>99?function(e){const t=Math.floor(e/60);let s=e%60;return s=s<10?"0".concat(s):s,"".concat(t,":").concat(s)}(a):a;this.handleError(s(ft.reconnect_countdown,{seconds:e}),"warn",(()=>{clearInterval(this.reconnectCountdown),this.tinode.reconnect()}),s(ft.reconnect_now)),a-=1}),1e3)}handleDisconnect(e){this.setState({connected:!1,ready:!1,topicSelectedOnline:!1,errorText:e&&e.message?e.message:"Disconnected",errorLevel:e&&e.message?"err":"warn",loginDisabled:!1,contextMenuVisible:!1,serverVersion:"no connection"})}doLogin(e,t,s){if(this.tinode.isAuthenticated())return void Pe.navigateTo("");s=c().credential(s);let a=null;const i=this.tinode.getAuthToken();e&&t?(this.setState({password:null}),a=this.tinode.loginBasic(e,t,s)):i&&(a=this.tinode.loginToken(i.token,s)),a?a.then((e=>{e.code>=300&&"validate credentials"===e.text?(this.setState({loadSpinnerVisible:!1}),s&&this.handleError(this.props.intl.formatMessage(ft.code_doesnot_match),"warn"),this.handleCredentialsRequest(e.params)):this.handleLoginSuccessful()})).catch((e=>{this.setState({loginDisabled:!1,credMethod:void 0,credCode:void 0,loadSpinnerVisible:!1,autoLogin:!1}),this.handleError(e.message,"err"),localStorage.removeItem("auth-token"),Pe.navigateTo("")})):(Pe.navigateTo(""),this.setState({loginDisabled:!1}))}handleCredentialsRequest(e){const t=Pe.parseUrlHash(window.location.hash);t.path[0]="cred",t.params.method=e.cred[0],Pe.navigateTo(Pe.composeUrlHash(t.path,t.params))}handleLoginSuccessful(){this.handleError(),He.getObject("keep-logged-in")&&He.setObject("auth-token",this.tinode.getAuthToken());const e=this.tinode.getMeTopic();e.onMetaDesc=this.tnMeMetaDesc,e.onContactUpdate=this.tnMeContactUpdate,e.onSubsUpdated=this.tnMeSubsUpdated,this.setState({connected:!0,credMethod:void 0,credCode:void 0,myUserId:this.tinode.getCurrentUserID(),autoLogin:!0}),e.subscribe(e.startMetaQuery().withLaterSub().withDesc().withTags().withCred().build()).catch((e=>{this.tinode.disconnect(),localStorage.removeItem("auth-token"),this.handleError(e.message,"err"),Pe.navigateTo("")})).finally((()=>{this.setState({loadSpinnerVisible:!1})})),Pe.navigateTo(Pe.setUrlSidePanel(window.location.hash,"contacts"))}tnMeMetaDesc(e){e&&(e.public&&this.setState({sidePanelTitle:e.public.fn,sidePanelAvatar:P(e.public.photo)}),e.acs&&this.setState({incognitoMode:!e.acs.isPresencer()}))}tnMeContactUpdate(e,t){if("on"==e||"off"==e)this.resetContactList(),this.state.topicSelected==t.topic&&this.setState({topicSelectedOnline:"on"==e});else if("read"==e)this.resetContactList();else if("msg"==e){const e=this.tinode.getTopic(t.topic),s=e&&e.isArchived();t.unread>0&&this.state.messageSounds&&!s&&(document.hidden||this.state.topicSelected!=t.topic)&&vt.play(),this.resetContactList()}else"recv"==e||("gone"==e||"unsub"==e?(this.state.topicSelected==t.topic&&this.handleTopicSelected(null),this.resetContactList()):"acs"==e?this.state.topicSelected==t.topic&&this.setState({topicSelectedAcs:t.acs}):"del"==e||"upd"==e||console.log("Unsupported (yet) presence update:"+e+" in: "+t.topic))}tnMeSubsUpdated(e){this.resetContactList()}static prepareSearchableContacts(e,t){const s={};for(const t of e)c().isP2PTopicName(t.topic)&&(s[t.topic]={user:t.topic,updated:t.updated,public:t.public,private:t.private,acs:t.acs});for(const e of t)s[e.user]||(s[e.user]=e);return Object.values(s)}resetContactList(){const e={chatList:[]};this.state.ready||(e.ready=!0),this.tinode.getMeTopic().contacts((t=>{e.chatList.push(t),this.state.topicSelected==t.topic&&(e.topicSelectedOnline=t.online,e.topicSelectedAcs=t.acs)})),e.searchableContacts=Et.prepareSearchableContacts(e.chatList,this.state.searchResults),this.setState(e)}tnData(e){const t=this.tinode.getTopic(e.topic);t.msgStatus(e)>=c().MESSAGE_STATUS_SENT&&e.from!=this.state.myUserId&&(clearTimeout(this.receivedTimer),this.receivedTimer=setTimeout((()=>{this.receivedTimer=void 0,t.noteRecv(e.seq)}),500))}tnInitFind(){const e=this.tinode.getFndTopic();e.onSubsUpdated=this.tnFndSubsUpdated,e.isSubscribed()?this.tnFndSubsUpdated():e.subscribe(e.startMetaQuery().withSub().build()).catch((e=>{this.handleError(e.message,"err")}))}tnFndSubsUpdated(){const e=[];this.tinode.getFndTopic().contacts((t=>{e.push(t)})),this.setState({searchResults:e,searchableContacts:Et.prepareSearchableContacts(this.state.chatList,e)})}handleSearchContacts(e){const t=this.tinode.getFndTopic();t.setMeta({desc:{public:e}}).then((e=>t.getMeta(t.startMetaQuery().withSub().build()))).catch((e=>{this.handleError(e.message,"err")}))}handleTopicSelected(e){this.state.newTopicParams&&this.state.newTopicParams._topicName!=e&&this.setState({newTopicParams:null}),e?(this.setState({errorText:"",errorLevel:null,mobilePanel:"topic-view",showInfoPanel:!1}),this.state.topicSelected!=e&&(this.setState({topicSelectedOnline:this.tinode.isTopicOnline(e),topicSelectedAcs:this.tinode.getTopicAccessMode(e)}),Pe.navigateTo(Pe.setUrlTopic("",e)))):(this.setState({errorText:"",errorLevel:null,mobilePanel:"sidepanel",topicSelectedOnline:!1,topicSelectedAcs:null,showInfoPanel:!1}),Pe.navigateTo(Pe.setUrlTopic("",null)))}handleHideMessagesView(){this.setState({mobilePanel:"sidepanel"}),Pe.navigateTo(Pe.setUrlTopic(window.location.hash,null))}handleSendMessage(e,t,s){const a=this.tinode.getTopic(this.state.topicSelected);(e=a.createMessage(e,!1))._uploader=s,a.isSubscribed()||(t||(t=Promise.resolve()),t=t.then((()=>a.subscribe()))),t&&(t=t.catch((e=>{this.handleError(e.message,"err")}))),a.publishDraft(e,t).then((e=>{if(a.isArchived())return a.archive(!1)})).catch((e=>{this.handleError(e.message,"err")}))}handleNewChatInvitation(e,t){const s=this.tinode.getTopic(e);let a=null;switch(t){case"accept":const i=s.getAccessMode().getGiven();a=s.setMeta({sub:{mode:i}}),s.isP2P()&&(a=a.then((t=>{s.setMeta({sub:{user:e,mode:i}})})));break;case"delete":a=s.delTopic(!0);break;case"block":const n=s.getAccessMode().updateWant("-JP").getWant();a=s.setMeta({sub:{mode:n}}).then((e=>this.handleTopicSelected(null)));break;default:console.log("Unknown invitation action",'"'+t+'""')}null!=a&&a.catch((e=>{this.handleError(e.message,"err")}))}handleNewAccount(){this.handleError(),Pe.navigateTo(Pe.setUrlSidePanel(window.location.hash,"register"))}handleNewAccountRequest(e,t,s,a,i){this.handleError(),this.tinode.connect(this.state.serverAddress).then((()=>this.tinode.createAccountBasic(e,t,{public:s,tags:i,cred:c().credential(a)}))).then((e=>{e.code>=300&&"validate credentials"==e.text?this.handleCredentialsRequest(e.params):this.handleLoginSuccessful(this)})).catch((e=>{this.handleError(e.message,"err")}))}handleUpdateAccountRequest(e,t,s){if(this.handleError(),t||s){const e={};t&&(e.public=t),s&&(e.defacs=s),this.tinode.getMeTopic().setMeta({desc:e}).catch((e=>{this.handleError(e.message,"err")}))}e&&this.tinode.updateAccountBasic(null,this.tinode.getCurrentLogin(),e).catch((e=>{this.handleError(e.message,"err")}))}handleToggleIncognitoMode(e){const t=this.tinode.getMeTopic(),s=t.getAccessMode().updateWant(e?"-P":"+P").getWant();t.setMeta({sub:{mode:s}}).catch((e=>{this.handleError(e.message,"err")}))}handleUpdateAccountTagsRequest(e){this.tinode.getMeTopic().setMeta({tags:e}).catch((e=>{this.handleError(e.message,"err")}))}handleSettings(){this.handleError(),Pe.navigateTo(Pe.setUrlSidePanel(window.location.hash,this.state.myUserId?"edit":"settings"))}handleGlobalSettings(e){const t=e.serverAddress||this.state.serverAddress,s=e.transport||this.state.transport;this.tinode&&(this.tinode.onDisconnect=void 0,this.tinode.disconnect()),this.tinode=Et.tnSetup(t,s,this.props.intl.locale),this.tinode.onConnect=this.handleConnected,this.tinode.onDisconnect=this.handleDisconnect,this.setState({serverAddress:t,transport:s}),He.setObject("settings",{serverAddress:t,transport:s}),Pe.navigateTo(Pe.setUrlSidePanel(window.location.hash,""))}handleShowArchive(){Pe.navigateTo(Pe.setUrlSidePanel(window.location.hash,this.state.myUserId?"archive":""))}handleShowBlocked(){Pe.navigateTo(Pe.setUrlSidePanel(window.location.hash,this.state.myUserId?"blocked":""))}initDesktopAlerts(){this.fbPush.onTokenRefresh((()=>{this.requestPushToken()})),this.fbPush.onMessage((e=>{}))}togglePushToken(e){e?this.state.firebaseToken?(this.setState({desktopAlerts:!0}),He.updateObject("settings",{desktopAlerts:!0})):this.fbPush.requestPermission().then((()=>{this.requestPushToken()})).catch((e=>{this.handleError(e.message,"err"),this.setState({desktopAlerts:!1,firebaseToken:null}),He.updateObject("settings",{desktopAlerts:!1}),console.log("Failed to get permission to notify.",e)})):this.state.firebaseToken?this.fbPush.deleteToken(this.state.firebaseToken).catch((e=>{console.log("Unable to delete token.",e)})).finally((()=>{He.updateObject("settings",{desktopAlerts:!1}),localStorage.removeItem("firebase-token"),this.setState({desktopAlerts:!1,firebaseToken:null})})):(this.setState({desktopAlerts:!1,firebaseToken:null}),He.updateObject("settings",{desktopAlerts:!1}))}requestPushToken(){this.fbPush.getToken().then((e=>{e!=this.state.firebaseToken&&(this.tinode.setDeviceToken(e,!0),He.setObject("firebase-token",e)),this.setState({firebaseToken:e,desktopAlerts:!0}),He.updateObject("settings",{desktopAlerts:!0})})).catch((e=>{this.handleError(e.message,"err"),console.log("Failed to retrieve firebase token",e)}))}handleToggleMessageSounds(e){this.setState({messageSounds:e}),He.updateObject("settings",{messageSoundsOff:!e})}handleCredAdd(e,t){this.tinode.getMeTopic().setMeta({cred:{meth:e,val:t}}).catch((e=>{this.handleError(e.message,"err")}))}handleCredDelete(e,t){this.tinode.getMeTopic().delCredential(e,t).catch((e=>{this.handleError(e.message,"err")}))}handleCredConfirm(e,t){this.handleCredentialsRequest({cred:[e]})}handleSidepanelCancel(){const e=Pe.parseUrlHash(window.location.hash);let t="";["security","support","general","notif"].includes(e.path[0])?t="edit":"blocked"==e.path[0]?t="security":this.state.myUserId&&(t="contacts"),e.path[0]=t,e.params&&(delete e.params.code,delete e.params.method,delete e.params.tab),Pe.navigateTo(Pe.composeUrlHash(e.path,e.params)),this.setState({errorText:"",errorLevel:null})}basicNavigator(e){Pe.navigateTo(Pe.setUrlSidePanel(window.location.hash,e))}handleStartTopicRequest(e,t,s,a,i){if(e&&this.tinode.isTopicCached(e))return void this.handleTopicSelected(e);const n={};c().isP2PTopicName(e)?(n.sub={mode:_},n.desc={defacs:{auth:_}}):(e=e||this.tinode.newGroupTopicName(i),n.desc={public:t,private:{comment:s}},n.tags=a),n._topicName=e,this.setState({newTopicParams:n},(()=>{this.handleTopicSelected(e)}))}handleNewTopicCreated(e,t){this.state.topicSelected==e&&e!=t&&this.setState({topicSelected:t},(()=>{Pe.navigateTo(Pe.setUrlTopic("",t))}))}handleTopicUpdateRequest(e,t,s,a){const i=this.tinode.getTopic(e);if(i){const e={};t&&(e.public=t),s&&(e.private=s===c().DEL_CHAR?c().DEL_CHAR:{comment:s}),a&&(e.defacs=a),i.setMeta({desc:e}).catch((e=>{this.handleError(e.message,"err")}))}}handleChangePermissions(e,t,s){const a=this.tinode.getTopic(e);if(a){const e=a.getAccessMode();s?(e.updateGiven(t),t=e.getGiven()):(e.updateWant(t),t=e.getWant()),a.setMeta({sub:{user:s,mode:t}}).catch((e=>{this.handleError(e.message,"err")}))}}handleTagsUpdated(e,t){const s=this.tinode.getTopic(e);s&&s.setMeta({tags:t}).catch((e=>{this.handleError(e.message,"err")}))}handleLogout(){ne(0),localStorage.removeItem("auth-token"),localStorage.removeItem("firebase-token"),localStorage.removeItem("settings"),this.state.firebaseToken&&this.fbPush.deleteToken(this.state.firebaseToken),this.tinode&&(this.tinode.onDisconnect=void 0,this.tinode.disconnect()),this.setState(this.getBlankState()),this.tinode=Et.tnSetup(this.state.serverAddress,this.state.transport,this.props.intl.locale),this.tinode.onConnect=this.handleConnected,this.tinode.onDisconnect=this.handleDisconnect,Pe.navigateTo("")}handleDeleteAccount(){this.tinode.delCurrentUser(!0).then((e=>{this.handleLogout()}))}handleDeleteMessagesRequest(e){const t=this.tinode.getTopic(e);t&&t.delMessagesAll(!0).catch((e=>{this.handleError(e.message,"err")}))}handleLeaveUnsubRequest(e){const t=this.tinode.getTopic(e);t&&t.leave(!0).then((e=>{Pe.navigateTo(Pe.setUrlTopic(window.location.hash,""))})).catch((e=>{this.handleError(e.message,"err")}))}handleBlockTopicRequest(e){const t=this.tinode.getTopic(e);t&&t.updateMode(null,"-JP").then((e=>{Pe.navigateTo(Pe.setUrlTopic(window.location.hash,""))})).catch((e=>{this.handleError(e.message,"err")}))}handleReportTopic(e){const t=this.tinode.getTopic(e);t&&(this.tinode.publish(c().TOPIC_SYS,c().Drafty.attachJSON(null,{action:"report",target:e})),t.updateMode(null,"-JP").then((e=>{Pe.navigateTo(Pe.setUrlTopic(window.location.hash,""))})).catch((e=>{this.handleError(e.message,"err")})))}handleShowContextMenu(e,t){this.setState({contextMenuVisible:!0,contextMenuClickAt:{x:e.x,y:e.y},contextMenuParams:e,contextMenuItems:t||this.defaultTopicContextMenu(e.topicName),contextMenuBounds:i().findDOMNode(this).getBoundingClientRect()})}defaultTopicContextMenu(e){const t=this.tinode.getTopic(e);let s=!1,a=!1,i=!1,n=!1,o=!1,l=!1;if(t){n=t.isSubscribed(),l=t.isArchived();const e=t.getAccessMode();e&&(s=e.isMuted(),a=!e.isJoiner(),i=!e.isJoiner("want"),o=e.isDeleter())}return[n?{title:this.props.intl.formatMessage(ft.menu_item_info),handler:this.handleShowInfoView}:null,n?"messages_clear":null,n&&o?"messages_clear_hard":null,s?a?null:"topic_unmute":"topic_mute",i?"topic_unblock":"topic_block",l?null:"topic_archive","topic_delete"]}handleHideContextMenu(){this.setState({contextMenuVisible:!1,contextMenuClickAt:null,contextMenuParams:null,contextMenuBounds:null})}handleContextMenuAction(e,t,s){"topic_archive"==e&&t&&s.topicName&&s.topicName==this.state.topicSelected&&t.then((()=>{this.handleTopicSelected(null)}))}handleShowAlert(e,t,s,a,i,n){this.setState({alertVisible:!0,alertParams:{title:e,content:t,onConfirm:s,confirm:a,onReject:i,reject:n}})}handleShowInfoView(){Pe.navigateTo(Pe.addUrlParam(window.location.hash,"info",!0)),this.setState({showInfoPanel:!0})}handleHideInfoView(){Pe.navigateTo(Pe.removeUrlParam(window.location.hash,"info")),this.setState({showInfoPanel:!1})}handleMemberUpdateRequest(e,t,s){if(!e)return;const a=this.tinode.getTopic(e);a&&(t&&t.length>0&&t.map((e=>{a.invite(e,null).catch((e=>{this.handleError(e.message,"err")}))})),s&&s.length>0&&s.map((e=>{a.delSubscription(e).catch((e=>{this.handleError(e.message,"err")}))})))}handleValidateCredentialsRequest(e,t){if(this.tinode.isAuthenticated()){this.tinode.getMeTopic().setMeta({cred:{meth:e,resp:t}}).then((()=>{Pe.navigateTo("")})).catch((e=>{this.handleError(e.message,"err")}))}else this.setState({credMethod:e,credCode:t}),this.doLogin(null,null,{meth:e,resp:t})}handlePasswordResetRequest(e,t){this.tinode.connect().then((()=>this.tinode.requestResetAuthSecret("basic",e,t))).catch((e=>{this.handleError(e.message,"err")}))}handleResetPassword(e,t,s){(s=function(e){if(e){e=e.replace(/-/g,"+").replace(/_/g,"/");try{e=btoa(atob(e))}catch(t){console.log("Failed to base64 re-encode string.",t),e=null}}return e}(s))?this.tinode.connect().then((()=>this.tinode.updateAccountBasic(null,null,t,{token:s}))).catch((e=>{this.handleError(e.message,"err")})):this.handleError(this.props.intl.formatMessage(ft.invalid_security_token),"err")}render(){return s().createElement("div",{id:"app-container"},this.state.contextMenuVisible?s().createElement(M,{tinode:this.tinode,bounds:this.state.contextMenuBounds,clickAt:this.state.contextMenuClickAt,params:this.state.contextMenuParams,items:this.state.contextMenuItems,hide:this.handleHideContextMenu,onShowAlert:this.handleShowAlert,onAction:this.handleContextMenuAction,onTopicRemoved:e=>{e==this.state.topicSelected&&this.handleTopicSelected(null)},onError:this.handleError}):null,s().createElement(d,{visible:this.state.alertVisible,title:this.state.alertParams.title,content:this.state.alertParams.content,onReject:this.state.alertParams.onReject?()=>{this.setState({alertVisible:!1})}:null,reject:this.state.alertParams.reject,onConfirm:()=>{this.setState({alertVisible:!1}),this.state.alertParams.onConfirm()},confirm:this.state.alertParams.confirm}),s().createElement(_t,{tinode:this.tinode,connected:this.state.connected,displayMobile:this.state.displayMobile,hideSelf:this.state.displayMobile&&"sidepanel"!==this.state.mobilePanel,state:this.state.sidePanelSelected,title:this.state.sidePanelTitle,avatar:this.state.sidePanelAvatar,login:this.state.login,myUserId:this.state.myUserId,loginDisabled:this.state.loginDisabled,loadSpinnerVisible:this.state.loadSpinnerVisible,errorText:this.state.errorText,errorLevel:this.state.errorLevel,errorAction:this.state.errorAction,errorActionText:this.state.errorActionText,topicSelected:this.state.topicSelected,chatList:this.state.chatList,credMethod:this.state.credMethod,credCode:this.state.credCode,transport:this.state.transport,messageSounds:this.state.messageSounds,desktopAlerts:this.state.desktopAlerts,desktopAlertsEnabled:this.state.desktopAlertsEnabled,incognitoMode:this.state.incognitoMode,serverAddress:this.state.serverAddress,serverVersion:this.state.serverVersion,onGlobalSettings:this.handleGlobalSettings,onSignUp:this.handleNewAccount,onSettings:this.handleSettings,onBasicNavigate:this.basicNavigator,onLoginRequest:this.handleLoginRequest,onCreateAccount:this.handleNewAccountRequest,onUpdateAccount:this.handleUpdateAccountRequest,onUpdateAccountTags:this.handleUpdateAccountTagsRequest,onTogglePushNotifications:this.togglePushToken,onToggleMessageSounds:this.handleToggleMessageSounds,onToggleIncognitoMode:this.handleToggleIncognitoMode,onCredAdd:this.handleCredAdd,onCredDelete:this.handleCredDelete,onCredConfirm:this.handleCredConfirm,onTopicSelected:this.handleTopicSelected,onCreateTopic:this.handleStartTopicRequest,onLogout:this.handleLogout,onDeleteAccount:this.handleDeleteAccount,onShowAlert:this.handleShowAlert,onCancel:this.handleSidepanelCancel,onError:this.handleError,onValidateCredentials:this.handleValidateCredentialsRequest,onPasswordResetRequest:this.handlePasswordResetRequest,onResetPassword:this.handleResetPassword,onShowArchive:this.handleShowArchive,onShowBlocked:this.handleShowBlocked,onInitFind:this.tnInitFind,searchResults:this.state.searchResults,onSearchContacts:this.handleSearchContacts,showContextMenu:this.handleShowContextMenu}),s().createElement(Re,{tinode:this.tinode,connected:this.state.connected,ready:this.state.ready,online:this.state.topicSelectedOnline,acs:this.state.topicSelectedAcs,displayMobile:this.state.displayMobile,viewportWidth:this.state.viewportWidth,viewportHeight:this.state.viewportHeight,hideSelf:this.state.displayMobile&&("topic-view"!==this.state.mobilePanel||this.state.showInfoPanel),topic:this.state.topicSelected,myUserId:this.state.myUserId,serverVersion:this.state.serverVersion,serverAddress:this.state.serverAddress,applicationVisible:this.state.applicationVisible,errorText:this.state.errorText,errorLevel:this.state.errorLevel,errorAction:this.state.errorAction,errorActionText:this.state.errorActionText,newTopicParams:this.state.newTopicParams,onHideMessagesView:this.handleHideMessagesView,onData:this.tnData,onError:this.handleError,onNewTopicCreated:this.handleNewTopicCreated,showContextMenu:this.handleShowContextMenu,onChangePermissions:this.handleChangePermissions,onNewChat:this.handleNewChatInvitation,sendMessage:this.handleSendMessage}),this.state.showInfoPanel?s().createElement(pe,{tinode:this.tinode,connected:this.state.connected,displayMobile:this.state.displayMobile,topic:this.state.topicSelected,searchableContacts:this.state.searchableContacts,myUserId:this.state.myUserId,errorText:this.state.errorText,errorLevel:this.state.errorLevel,errorAction:this.state.errorAction,errorActionText:this.state.errorActionText,onTopicDescUpdate:this.handleTopicUpdateRequest,onCancel:this.handleHideInfoView,onShowAlert:this.handleShowAlert,onChangePermissions:this.handleChangePermissions,onMemberUpdateRequest:this.handleMemberUpdateRequest,onDeleteMessages:this.handleDeleteMessagesRequest,onLeaveTopic:this.handleLeaveUnsubRequest,onBlockTopic:this.handleBlockTopicRequest,onReportTopic:this.handleReportTopic,onAddMember:this.handleManageGroupMembers,onTopicTagsUpdate:this.handleTagsUpdated,onInitFind:this.tnInitFind,onError:this.handleError,showContextMenu:this.handleShowContextMenu}):null)}}var wt=(0,n.injectIntl)(Et);const{params:Ct}=Pe.parseUrlHash(window.location.hash),St=Ct&&Ct.hl||navigator.languages&&navigator.languages[0]||navigator.language||navigator.userLanguage||"en",Mt=St.toLowerCase().split(/[-_]/)[0],yt=o[St]||o[Mt]||o.en;i().render(s().createElement(n.IntlProvider,{locale:St,messages:yt,textComponent:s().Fragment},s().createElement(wt,null)),document.getElementById("mountPoint"))}();
//# sourceMappingURL=index.prod.js.map
\ No newline at end of file
diff --git a/umd/index.prod.js.map b/umd/index.prod.js.map
index a3e3232f..c16bf5ea 100644
--- a/umd/index.prod.js.map
+++ b/umd/index.prod.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack://tinode-webapp/webpack/bootstrap","webpack://tinode-webapp/webpack/runtime/compat get default export","webpack://tinode-webapp/webpack/runtime/define property getters","webpack://tinode-webapp/webpack/runtime/hasOwnProperty shorthand","webpack://tinode-webapp/external \"React\"","webpack://tinode-webapp/external \"ReactDOM\"","webpack://tinode-webapp/external \"ReactIntl\"","webpack://tinode-webapp/external \"firebase\"","webpack://tinode-webapp/external \"Tinode\"","webpack://tinode-webapp/external [\"firebase\",\"messaging\"]","webpack://tinode-webapp/./src/widgets/alert.jsx","webpack://tinode-webapp/./src/version.js","webpack://tinode-webapp/./src/config.js","webpack://tinode-webapp/./src/widgets/context-menu.jsx","webpack://tinode-webapp/./src/lib/strformat.js","webpack://tinode-webapp/./src/widgets/letter-tile.jsx","webpack://tinode-webapp/./src/lib/blob-helpers.js","webpack://tinode-webapp/./src/widgets/avatar-upload.jsx","webpack://tinode-webapp/./src/widgets/checkbox.jsx","webpack://tinode-webapp/./src/widgets/contact-badges.jsx","webpack://tinode-webapp/./src/widgets/unread-badge.jsx","webpack://tinode-webapp/./src/widgets/contact.jsx","webpack://tinode-webapp/./src/widgets/contact-action.jsx","webpack://tinode-webapp/./src/widgets/contact-list.jsx","webpack://tinode-webapp/./src/widgets/menu-cancel.jsx","webpack://tinode-webapp/./src/widgets/error-panel.jsx","webpack://tinode-webapp/./src/widgets/chip.jsx","webpack://tinode-webapp/./src/widgets/chip-input.jsx","webpack://tinode-webapp/./src/widgets/group-manager.jsx","webpack://tinode-webapp/./src/widgets/visible-password.jsx","webpack://tinode-webapp/./src/widgets/in-place-edit.jsx","webpack://tinode-webapp/./src/widgets/more-button.jsx","webpack://tinode-webapp/./src/widgets/permissions-editor.jsx","webpack://tinode-webapp/./src/lib/utils.js","webpack://tinode-webapp/./src/widgets/tag-manager.jsx","webpack://tinode-webapp/./src/views/info-view.jsx","webpack://tinode-webapp/./src/widgets/file-progress.jsx","webpack://tinode-webapp/./src/widgets/attachment.jsx","webpack://tinode-webapp/./src/widgets/received-marker.jsx","webpack://tinode-webapp/./src/widgets/uploading-image.jsx","webpack://tinode-webapp/./src/widgets/chat-message.jsx","webpack://tinode-webapp/./src/widgets/send-message.jsx","webpack://tinode-webapp/./src/widgets/doc-preview.jsx","webpack://tinode-webapp/./src/widgets/group-subs.jsx","webpack://tinode-webapp/./src/widgets/image-preview.jsx","webpack://tinode-webapp/./src/widgets/invitation.jsx","webpack://tinode-webapp/./src/widgets/load-spinner.jsx","webpack://tinode-webapp/./src/views/logo-view.jsx","webpack://tinode-webapp/./src/lib/navigation.js","webpack://tinode-webapp/./src/views/messages-view.jsx","webpack://tinode-webapp/./src/widgets/button-back.jsx","webpack://tinode-webapp/./src/widgets/menu-contacts.jsx","webpack://tinode-webapp/./src/widgets/menu-start.jsx","webpack://tinode-webapp/./src/widgets/side-navbar.jsx","webpack://tinode-webapp/./src/views/contacts-view.jsx","webpack://tinode-webapp/./src/lib/local-storage.js","webpack://tinode-webapp/./src/views/create-account-view.jsx","webpack://tinode-webapp/./src/views/edit-account-view.jsx","webpack://tinode-webapp/./src/views/acc-general-view.jsx","webpack://tinode-webapp/./src/views/acc-notifications-view.jsx","webpack://tinode-webapp/./src/views/acc-security-view.jsx","webpack://tinode-webapp/./src/views/acc-support-view.jsx","webpack://tinode-webapp/./src/views/login-view.jsx","webpack://tinode-webapp/./src/widgets/new-topic-by-id.jsx","webpack://tinode-webapp/./src/widgets/new-topic-group.jsx","webpack://tinode-webapp/./src/widgets/search-contacts.jsx","webpack://tinode-webapp/./src/views/new-topic-view.jsx","webpack://tinode-webapp/./src/views/password-reset-view.jsx","webpack://tinode-webapp/./src/widgets/host-selector.jsx","webpack://tinode-webapp/./src/views/settings-view.jsx","webpack://tinode-webapp/./src/views/validation-view.jsx","webpack://tinode-webapp/./src/views/sidepanel-view.jsx","webpack://tinode-webapp/./src/lib/host-name.js","webpack://tinode-webapp/./src/views/tinode-web.jsx","webpack://tinode-webapp/./src/index.js"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","React","ReactDOM","ReactIntl","firebase","messaging","Tinode","Alert","render","this","props","visible","className","title","content","onReject","onClick","reject","FormattedMessage","id","onConfirm","confirm","APP_NAME","KNOWN_HOSTS","hosted","local","DEFAULT_HOST","KEYPRESS_DELAY","DEFAULT_P2P_ACCESS_MODE","REM_SIZE","AVATAR_SIZE","MAX_INBAND_ATTACHMENT_SIZE","MAX_EXTERN_ATTACHMENT_SIZE","MAX_IMAGE_DIM","MAX_TITLE_LENGTH","messages","defineMessages","info","clear_messages","clear_for_all","delete_for_all","send_retry","mute","unmute","topic_delete","topic_delete_warning","unblock","block","topic_block_warning","member_delete","archive","ContextMenu","constructor","super","formatMessage","intl","handlePageClick","bind","handleEscapeKey","handleClick","MenuItems","handler","params","errorHandler","onShowAlert","menu_item_clear_messages","deleteMessages","menu_item_clear_messages_for_all","delete","retryMessage","topicPermissionSetter","menu_item_block","then","ctrl","onTopicRemoved","topicName","menu_item_delete_topic","topic","tinode","getTopic","delTopic","catch","err","message","console","log","user","delSubscription","componentDidMount","document","addEventListener","componentWillUnmount","removeEventListener","e","contains","target","preventDefault","stopPropagation","hide","keyCode","item","items","currentTarget","dataset","onAction","onError","all","hard","cancelSend","seq","delMessagesAll","delMessagesList","flushMessage","msg","createMessage","publishDraft","mode","result","updateMode","count","menu","map","push","data-id","vSize","length","position","left","bounds","right","clickAt","x","top","bottom","y","style","injectIntl","shortDateFormat","locale","window","navigator","userLanguage","language","now","Date","getFullYear","getMonth","getDate","toLocaleTimeString","hour12","hour","minute","toLocaleDateString","month","day","year","bytesToHumanSize","bytes","sizes","bucket","Math","min","floor","log2","pow","round","toFixed","LetterTile","avatar","isGroup","iconColor","abs","value","hash","i","charCodeAt","stringHash","trim","letter","charAt","alt","src","onerror","SUPPORTED_IMAGE_FORMATS","MIME_EXTENSIONS","makeImageUrl","photo","type","data","fitImageSize","width","height","maxWidth","maxHeight","forceSquare","scale","size","dstWidth","dstHeight","srcWidth","srcHeight","xoffset","yoffset","imageScaled","fileOrBlob","maxSize","onSuccess","img","Image","crossOrigin","onload","async","URL","revokeObjectURL","dim","canvas","createElement","ctx","getContext","imageSmoothingEnabled","drawImage","mime","indexOf","blob","Promise","resolve","toBlob","clearRect","fname","idx","ext","at","lastIndexOf","substring","fileNameForMime","name","createObjectURL","fileToBase64","file","reader","FileReader","split","readAsDataURL","blobToBase64","AvatarUpload","state","dataUrl","handleFileUpload","componentDidUpdate","prevProps","setState","files","unused","base64bits","du","onImageChanged","randId","random","substr","readOnly","href","uid","accept","onChange","htmlFor","CheckBox","handleChange","checked","icon_mapping","ContactBadges","badges","b","icon","color","UnreadBadge","Contact","handleContextClick","onSelected","index","showContextMenu","pageY","pageX","online","slice","icon_badges","acs","showMode","getMode","isMuted","isJoiner","showCheckmark","selected","showOnline","isChannel","unread","comment","ContactAction","action","values","badge_you","badge_owner","ContactList","Array","isArray","topicSelected","contactNodes","contactsCount","contacts","c","filterFunc","filter","private","toLowerCase","public","fn","myUserId","isOwner","join","showUnread","connected","onTopicSelected","noScroll","dangerouslySetInnerHTML","__html","emptyListMessage","MenuCancel","onCancel","ErrorPanel","show","level","onClearError","warn","text","whiteSpace","actionText","Chip","handleCancel","invalid","noAvatar","required","ChipInput","deriveStateFromProps","input","focused","handleTextInput","removeChipAt","handleChipCancel","handleFocusGained","handleFocusLost","handleKeyDown","placeholder","chips","prompt","sortedChips","sortChips","staticMembers","chipIndex","indexChips","prevState","keep","normal","includes","concat","removed","onChipRemoved","onFocusLost","onEnter","undefined","avatarDisabled","onFocus","onBlur","onKeyDown","autoFocus","no_contacts","contacts_not_found_short","GroupManager","members","indexMembers","keepInitialMembers","requiredMember","contactFilter","noContactsMessage","selectedContacts","handleContactSelected","handleMemberRemoved","handleContactFilter","handleSubmit","m","delta","present","keepInitial","stat","sel","userId","status","splice","val","query","instance","added","keys","k","onSubmit","defaultMessage","doContactFiltering","VisiblePassword","handleVisibility","handeTextChange","handleEditingFinished","onFinished","setTimeout","activeElement","tabIndex","autoComplete","InPlaceEdit","active","initialValue","handleStartEditing","handlePasswordFinished","newValue","focus","event","checkValidity","fieldType","spanText","spanClass","MoreButton","open","handleToggle","onToggle","PermissionsEditor","replace","sort","names","joiner","writer","preser","approver","sharer","deleter","owner","skip","compare","userTitle","userAvatar","modeTitle","compareTitle","updateFavicon","oldIcon","getElementById","head","getElementsByTagName","newIcon","rel","removeChild","appendChild","vcard","imageDataUrl","card","dataStart","arrayEqual","l","sanitizeUrl","url","allowedSchemes","test","schemes","RegExp","TagManager","tags","tagInput","activated","handleTagInput","handleAddTag","handleRemoveTag","nextProps","last","tag","maxTagCount","getServerLimit","onTagsChanged","minTagLength","maxTagLength","add_tags_prompt","defautMessage","requested","granted","edit_permissions","other_user","clear_messages_warning","delete_messages","delete_messages_warning","leave_chat","leave_chat_warning","block_contact","block_contact_warning","report_chat","report_chat_warning","InfoView","admin","muted","address","groupTopic","channel","fullName","selectedContact","access","modeGiven","modeWant","modeGiven2","modeWant2","auth","anon","contactList","showMemberPanel","showPermissionEditorFor","moreInfoExpanded","previousMetaDesc","previousSubsUpdated","previousTagsUpdated","resetSubs","resetDesc","onMetaDesc","onSubsUpdated","onTagsUpdated","handleFullNameUpdate","handlePrivateUpdate","handleImageChanged","handleMuted","handlePermissionsChanged","handleLaunchPermissionsEditor","handleHidePermissionsEditor","handleShowAddMembers","handleHideAddMembers","handleMemberUpdateRequest","handleDeleteMessages","handleLeave","handleBlock","handleReport","handleMemberSelected","handleMoreInfo","handleTagsUpdated","handleContextMenu","getType","newState","user2","subscriber","getGiven","getWant","subscribers","sub","defacs","getDefaultAccess","getAccessMode","isAdmin","isSharer","isDeleter","getMeta","startMetaQuery","withTags","build","desc","subs","onTopicDescUpdate","ignored","onChangePermissions","perm","userPermissionsEdited","which","toEdit","toCompare","toSkip","titleEdit","titleCompare","userPermissionsTitle","userPermissionsAvatar","editedPermissions","immutablePermissions","editedPermissionsTitle","immutablePermissionsTitle","editedPermissionsSkipped","onInitFind","onMemberUpdateRequest","onDeleteMessages","onLeaveTopic","onBlockTopic","onReportTopic","onTopicTagsUpdate","menuItems","displayMobile","errorLevel","errorText","searchableContacts","private_placeholder","more","no_members","FileProgress","progress","Attachment","downloader","downloadFile","filename","mimetype","getLargeFileHelper","download","loaded","uploading","onCancelUpload","cancel","helperFunc","isUrlRelative","downloadUrl","downloadWidget","ReceivedMarker","timestamp","received","sending","failed","marker","UploadingImage","ChatMessage","uploader","onProgress","handleProgress","handleImagePreview","handleFormButtonClick","handleCancelUpload","onImagePreview","resp","act","ref","onFormResponse","MESSAGE_STATUS_FAILED","ratio","sideClass","deleted","sequence","response","bubbleClass","fullDisplay","userFrom","attachments","mimeType","Drafty","att","draftyFormatter","userName","notFound","el","attr","viewportWidth","authorizeURL","sanitizeImageUrl","inner","child","SendMessage","keypressTimestamp","getTime","handlePasteEvent","handleAttachImage","handleAttachFile","handleSend","handleKeyPress","handleMessageTyping","messageEditArea","disabled","onImageSuccess","onAttachmentSuccess","clipboardData","originalEvent","kind","getAsFile","imageFileScaledToBase64","imageFileToBase64","filePasted","bits","onAttachImage","onAttachFile","acceptBlank","noInput","onSendMessage","shiftKey","onKeyPress","messaging_disabled","messagePrompt","type_new_message","attachImage","click","attachFile","display","DocPreview","handleSendDoc","caption","onClose","mimeToIcon","default","image","video","iconFromMime","GroupSubs","usersOnline","totalCount","countToShow","some","overflow","ImagePreview","handleSendImage","assignWidth","node","getBoundingClientRect","maxlength","max","Invitation","handleButtonAction","evt","LoadSpinner","LogoView","version","serverVersion","serverAddress","HashNavigation","parts","path","forEach","part","decodeURIComponent","location","args","parsed","parseUrlHash","composeUrlHash","sidepanel","isUnconfirmed","ex","getExcessive","isPeerRestricted","ms","getMissing","MessagesView","getDerivedStateFromProps","leave","sendImageAttachment","sendFileAttachment","sendKeyPress","handleScrollReference","handleScrollEvent","handleDescChange","handleSubsUpdated","handleNewMessage","handleAllMessagesReceived","handleInfoReceipt","handleImagePostview","handleClosePreview","handleFormResponse","handleShowContextMenuMessage","handleNewChatAcceptance","handleEnablePeer","postReadNotification","clearNotificationQueue","readNotificationQueue","readNotificationTimer","messagesScroller","scrollTop","scrollHeight","scrollPosition","viewportHeight","onData","onAllMessagesReceived","onInfo","onPres","applicationVisible","isSubscribed","ready","newTopic","newTopicParams","_topicName","getQuery","withLaterDesc","withLaterSub","isReader","withLaterData","withLaterDel","fetchingMessages","setQuery","subscribe","code","onNewTopicCreated","queuedMessages","pub","_sending","publishMessage","setUrlTopic","blankState","not_found","nextState","docPreview","imagePreview","imagePostview","typingIndicator","msgs","assign","onlineSubs","peer","p2pPeerDesc","peerMessagingDisabled","isWriter","readingBlocked","unconformed","unconfirmed","oldTopicName","oldTopic","finally","msgHasMoreMessages","getMessagesPage","setInterval","clearInterval","n","shift","sendAt","noteRead","setMilliseconds","getMilliseconds","isNewMessage","msgStatus","from","what","clearTimeout","keyPressTimer","forceUpdate","sendMessage","attachJSON","parse","searchParams","set","search","messageSpecificMenuItems","onNewChat","noteKeyPress","maxInbandAttachmentSize","cannot_initiate_upload","uploadCompletionPromise","upload","urlPromise","maxExternAttachmentSize","limit","tinyBlob","blobMime","tinyBits64","insertImage","_tempPreview","appendLineBreak","append","init","bits64","preview","found","find","_cancelled","component","hideSelf","component2","messageNodes","previousFrom","chatBoxClass","nextFrom","thisFrom","isReply","deliveryStatus","userDesc","hi","ts","_uploader","lastSeen","cont","getMeTopic","getContact","online_now","seen","last_seen","when","onHideMessagesView","ButtonBack","onBack","MenuContacts","onNewTopic","onSettings","MenuStart","onSignUp","SideNavbar","archived_contacts_title","ContactsView","handleAction","unreadThreads","archivedCount","chatList","blocked","arch","touched","action_ignored","onShowArchive","LocalStorageUtil","localStorage","setItem","JSON","stringify","getItem","oldVal","getObject","setObject","removeItem","CreateAccountView","login","password","email","errorCleared","saveToken","handleLoginChange","handlePasswordChange","handleEmailChange","handleFnChange","handleToggleSaveToken","onCreateAccount","submitClasses","login_prompt","password_prompt","full_name_prompt","email_prompt","stay_logged_in","EditAccountView","me","onBasicNavigate","AccGeneralView","credentials","getCredentials","addCredActive","addCredInvalid","newCred","previousOnTags","tnNewTags","tnCredsUpdated","handleCredChange","handleCredKeyDown","handleCredEntered","onCredsUpdated","creds","onUpdateAccount","method","asPhone","asEmail","onCredAdd","onUpdateTags","cred","meth","done","onCredConfirm","onCredDelete","full_name_placeholder","title_tag_manager","handleCheckboxClick","onToggleMessageSounds","onTogglePushNotifications","onToggleIncognitoMode","messageSounds","desktopAlertsEnabled","desktopAlerts","incognitoMode","delete_account","delete_account_warning","AccSecurityView","blockedCount","handlePasswordUpdate","handleDeleteAccount","pwd","onDeleteAccount","password_unchanged","onLogout","onShowBlocked","AccSupportView","LoginView","hostName","onLogin","autoCorrect","autoCapitalize","invalid_id","NewTopicById","groupId","NewTopicGroup","handlePrivateChange","handleTagsChanged","handleChannelToggle","SearchContacts","edited","handleSearchChange","handleSearch","handleClear","onSearchContacts","search_placeholder","search_for_contacts","search_no_results","NewTopicView","tabSelected","searchQuery","handleTabClick","handleSearchContacts","handleNewGroupSubmit","handleGroupByID","addUrlParam","removeUrlParam","onCreateTopic","priv","no_contacts_placeholder","searchResults","PasswordResetView","token","scheme","onReset","onRequest","reset","HostSelector","changed","handleHostNameChange","onServerAddressChange","hostOptions","list","SettingsView","transport","handleTransportSelected","handleServerAddressChange","onUpdate","def","ws","lp","transportOptions","phone","ValidationView","credCode","credMethod","numbers_only","SidepanelView","handleLoginRequested","handleNewTopic","onLoginRequest","view","errorAction","errorActionText","loadSpinnerVisible","loginDisabled","onGlobalSettings","onUpdateAccountTags","onValidateCredentials","onPasswordResetRequest","onResetPassword","detectServerAddress","host","protocol","hostname","port","isSecureConnection","POP_SOUND","Audio","reconnect_countdown","reconnect_now","push_init_failed","invalid_security_token","no_connection","code_doesnot_match","TinodeWeb","getBlankState","handleResize","handleHashRoute","handleOnline","checkForAppUpdate","handleVisibilityEvent","handleError","handleLoginRequest","handleConnected","handleAutoreconnectIteration","doLogin","handleCredentialsRequest","handleLoginSuccessful","handleDisconnect","tnMeMetaDesc","tnMeContactUpdate","tnMeSubsUpdated","resetContactList","tnData","tnInitFind","tnFndSubsUpdated","handleTopicSelected","handleHideMessagesView","handleSendMessage","handleNewChatInvitation","handleNewAccount","handleNewAccountRequest","handleUpdateAccountRequest","handleUpdateAccountTagsRequest","handleToggleIncognitoMode","handleSettings","handleGlobalSettings","handleShowArchive","handleShowBlocked","handleToggleMessageSounds","handleCredAdd","handleCredDelete","handleCredConfirm","initDesktopAlerts","togglePushToken","requestPushToken","handleSidepanelCancel","handleStartTopicRequest","handleNewTopicCreated","handleTopicUpdateRequest","handleChangePermissions","handleLogout","handleDeleteMessagesRequest","handleLeaveUnsubRequest","handleBlockTopicRequest","handleReportTopic","handleShowContextMenu","defaultTopicContextMenu","handleHideContextMenu","handleShowAlert","handleShowInfoView","handleHideInfoView","handleValidateCredentialsRequest","handlePasswordResetRequest","handleResetPassword","handleContextMenuAction","settings","autoLogin","messageSoundsOff","FIREBASE_INIT","firebaseToken","hidden","sidePanelSelected","sidePanelTitle","sidePanelAvatar","liveConnection","onLine","topicSelectedOnline","topicSelectedAcs","innerWidth","showInfoPanel","mobilePanel","contextMenuVisible","contextMenuBounds","contextMenuClickAt","contextMenuParams","contextMenuItems","alertVisible","alertParams","documentElement","clientWidth","clientHeight","tnSetup","onConnect","onDisconnect","onAutoreconnectIteration","fbPush","usePublicVapidKey","messagingVapidKey","serviceWorker","register","reg","useServiceWorker","postMessage","setDeviceToken","parsedNav","expires","setAuthToken","connect","tab","readTimer","readTimerCallback","setHumanLanguage","enableLogging","mobile","onupdatefound","installingWorker","installing","onstatechange","controller","newTopicTabSelected","isConnected","getServerInfo","ver","sec","prom","reconnectCountdown","timeLeft","seconds","secondsToTime","reconnect","isAuthenticated","promise","getAuthToken","loginBasic","loginToken","onContactUpdate","getCurrentUserID","withDesc","withCred","disconnect","setUrlSidePanel","isPresencer","archived","isArchived","play","foundContacts","merged","updated","prepareSearchableContacts","receivedTimer","noteRecv","fnd","getFndTopic","withSub","s","setMeta","isTopicOnline","getTopicAccessMode","isP2P","am","updateWant","login_","password_","public_","cred_","tags_","createAccountBasic","updateAccountBasic","getCurrentLogin","on","onTokenRefresh","onMessage","payload","enabled","requestPermission","deleteToken","getToken","refreshedToken","delCredential","basicNavigator","isTopicCached","newGroupTopicName","oldName","newName","permissions","updateGiven","delCurrentUser","publish","self_blocked","subscribed","confirmText","rejectText","invite","requestResetAuthSecret","newPassword","str","btoa","atob","base64ReEncode","onAddMember","handleManageGroupMembers","hl","languages","baseLanguage","allMessages","IntlProvider","textComponent"],"mappings":"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","file":"index.prod.js","sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var __WEBPACK_NAMESPACE_OBJECT__ = React;","var __WEBPACK_NAMESPACE_OBJECT__ = ReactDOM;","var __WEBPACK_NAMESPACE_OBJECT__ = ReactIntl;","var __WEBPACK_NAMESPACE_OBJECT__ = firebase;","var __WEBPACK_NAMESPACE_OBJECT__ = Tinode;","var __WEBPACK_NAMESPACE_OBJECT__ = firebase.messaging;","import React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nexport default class Alert extends React.PureComponent {\n render() {\n return this.props.visible ?\n \n {menu}\n
\n );\n }\n}\n\nexport default injectIntl(ContextMenu);\n","// Short representation of time in the past.\nexport function shortDateFormat(then, locale) {\n locale = locale || window.navigator.userLanguage || window.navigator.language;\n const now = new Date();\n if (then.getFullYear() == now.getFullYear()) {\n if (then.getMonth() == now.getMonth() && then.getDate() == now.getDate()) {\n\t return then.toLocaleTimeString(locale, {hour12: false, hour: '2-digit', minute: '2-digit'});\n } else {\n\t return then.toLocaleDateString(locale,\n {hour12: false, month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit'});\n }\n }\n return then.toLocaleDateString(locale,\n {hour12: false, year: 'numeric', month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit'});\n}\n\n// Convert seconds to minutes:seconds, i.e. 156 sec -> 2:36.\nexport function secondsToTime(seconds) {\n const min = Math.floor(seconds / 60);\n let sec = seconds % 60;\n sec = sec < 10 ? `0${sec}` : sec;\n return `${min}:${sec}`;\n}\n\n// Convert a number of bytes to human-readable format.\nexport function bytesToHumanSize(bytes) {\n if (!bytes || bytes == 0) {\n return '0 Bytes';\n }\n\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n const bucket = Math.min(Math.floor(Math.log2(bytes) / 10) | 0, sizes.length-1);\n const count = bytes / Math.pow(1024, bucket);\n const round = bucket > 0 ? (count < 3 ? 2 : (count < 30 ? 1 : 0)) : 0;\n return count.toFixed(round) + ' ' + sizes[bucket];\n}\n\n// Get 32 bit integer hash value for a string. Ideally it should produce the same value\n// as Java's String#hash().\nexport function stringHash(value) {\n let hash = 0;\n value = '' + value;\n for (let i = 0; i < value.length; i++) {\n hash = ((hash << 5) - hash) + value.charCodeAt(i);\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash;\n}\n","import React from 'react';\n\nimport Tinode from 'tinode-sdk';\n\nimport { stringHash } from '../lib/strformat.js';\n\nexport default class LetterTile extends React.PureComponent {\n render() {\n let avatar;\n if (this.props.avatar === true) {\n const isGroup = (Tinode.topicType(this.props.topic) == 'grp');\n const iconColor = (isGroup ? 'light-color' : 'dark-color')\n + (Math.abs(stringHash(this.props.topic)) % 16);\n if (this.props.topic && this.props.title && this.props.title.trim()) {\n const letter = this.props.title.trim().charAt(0);\n const className = 'lettertile ' + iconColor;\n avatar = ({e.target.onerror = null; e.target.src=\"/img/broken_image.png\"}} />;\n } else {\n avatar = null;\n }\n return avatar;\n }\n}\n","// File and image helper functions.\nimport { MAX_INBAND_ATTACHMENT_SIZE, MAX_IMAGE_DIM } from '../config.js';\nimport { bytesToHumanSize } from './strformat.js'\n\n// Supported image MIME types and corresponding file extensions.\nexport const SUPPORTED_IMAGE_FORMATS = ['image/jpeg', 'image/gif', 'image/png', 'image/svg', 'image/svg+xml'];\nexport const MIME_EXTENSIONS = ['jpg', 'gif', 'png', 'svg', 'svg'];\n\n// Make a data URL from public.photo\nexport function makeImageUrl(photo) {\n return (photo && photo.type && photo.data) ?\n 'data:image/' + photo.type + ';base64,' + photo.data : null;\n}\n\n// Calculate linear dimensions for scaling image down to fit under a certain size.\n// Returns an object which contains destination sizes, source sizes, and offsets\n// into source (when making square images).\nexport function fitImageSize(width, height, maxWidth, maxHeight, forceSquare) {\n // Sanitize input\n width = width | 0;\n height = height | 0;\n maxWidth = maxWidth | 0;\n maxHeight = maxHeight | 0;\n\n if (width <= 0 || height <= 0 || maxWidth <= 0 || maxHeight <= 0) {\n return null;\n }\n\n if (forceSquare) {\n maxWidth = maxHeight = Math.min(maxWidth, maxHeight);\n }\n\n let scale = Math.min(\n Math.min(width, maxWidth) / width,\n Math.min(height, maxHeight) / height\n );\n\n let size = {\n dstWidth: (width * scale) | 0,\n dstHeight: (height * scale) | 0,\n };\n\n if (forceSquare) {\n // Also calculate parameters for making the image square.\n size.dstWidth = size.dstHeight = Math.min(size.dstWidth, size.dstHeight);\n size.srcWidth = size.srcHeight = Math.min(width, height);\n size.xoffset = ((width - size.srcWidth) / 2) | 0;\n size.yoffset = ((height - size.srcWidth) / 2) | 0;\n } else {\n size.xoffset = size.yoffset = 0;\n size.srcWidth = width;\n size.srcHeight = height;\n }\n return size;\n}\n\n// Ensure file's extension matches mime content type\nexport function fileNameForMime(fname, mime) {\n const idx = SUPPORTED_IMAGE_FORMATS.indexOf(mime);\n if (idx < 0 || !fname) {\n // Unknown mime or empty name.\n return fname;\n }\n const ext = MIME_EXTENSIONS[idx];\n\n const at = fname.lastIndexOf('.');\n if (at >= 0) {\n fname = fname.substring(0, at);\n }\n return fname + '.' + ext;\n}\n\n// Scale uploaded image to fit under certain dimensions and byte size, optionally constraining to a square.\n// On success calls onSuccess callback with the scaled image as Blob.\nexport function imageScaled(fileOrBlob, maxWidth, maxHeight, maxSize, forceSquare, onSuccess, onError) {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onerror = function(err) {\n onError(\"Image format unrecognized\");\n }\n img.onload = async function() {\n // Once the image is loaded, the URL is no longer needed.\n URL.revokeObjectURL(img.src);\n\n // Calculate the desired image dimensions.\n const dim = fitImageSize(this.width, this.height, maxWidth, maxHeight, forceSquare);\n if (!dim) {\n onError(\"Invalid image\");\n return;\n }\n let canvas = document.createElement('canvas');\n canvas.width = dim.dstWidth;\n canvas.height = dim.dstHeight;\n let ctx = canvas.getContext('2d');\n ctx.imageSmoothingEnabled = true;\n ctx.drawImage(this, dim.xoffset, dim.yoffset, dim.srcWidth, dim.srcHeight,\n 0, 0, dim.dstWidth, dim.dstHeight);\n\n const mime = SUPPORTED_IMAGE_FORMATS.indexOf(fileOrBlob.type) < 0 ? 'image/jpeg' : fileOrBlob.type;\n // Generate blob to check size of the image.\n let blob = await new Promise(resolve => canvas.toBlob(resolve, mime));\n if (!blob) {\n onError(\"Unsupported image format\");\n return;\n }\n\n // Ensure the image is not too large. Shrink the image keeping the aspect ratio.\n // Do nothing if maxsize is <= 0.\n while (maxSize > 0 && blob.length > maxSize) {\n dim.dstWidth = (dim.dstWidth * 0.70710678118) | 0;\n dim.dstHeight = (dim.dstHeight * 0.70710678118) | 0;\n canvas.width = dim.dstWidth;\n canvas.height = dim.dstHeight;\n ctx = canvas.getContext('2d');\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(this, dim.xoffset, dim.yoffset, dim.srcWidth, dim.srcHeight,\n 0, 0, dim.dstWidth, dim.dstHeight);\n blob = await new Promise(resolve => canvas.toBlob(resolve, mime));\n }\n\n canvas = null;\n onSuccess(blob, mime, dim.dstWidth, dim.dstHeight, fileNameForMime(fileOrBlob.name, mime));\n };\n img.src = URL.createObjectURL(fileOrBlob);\n}\n\n// Convert File to base64 string.\nexport function fileToBase64(file, onSuccess) {\n const reader = new FileReader();\n reader.addEventListener('load', function() {\n onSuccess(file.type, reader.result.split(',')[1], file.name);\n });\n reader.readAsDataURL(file);\n}\n\n// Convert Blob to base64 string.\nexport function blobToBase64(blob, onSuccess) {\n const reader = new FileReader();\n reader.addEventListener('load', function() {\n onSuccess(blob.type, reader.result.split(',')[1]);\n });\n reader.readAsDataURL(blob);\n}\n\n// File pasted from the clipboard. It's either an inline image or a file attachment.\n// FIXME: handle large files out of band.\nexport function filePasted(event, onImageSuccess, onAttachmentSuccess, onError) {\n var items = (event.clipboardData || event.originalEvent.clipboardData || {}).items;\n for (var i in items) {\n var item = items[i];\n if (item.kind === 'file') {\n var file = item.getAsFile();\n if (!file) {\n console.log(\"Failed to get file object from pasted file item\", item.kind, item.type);\n continue;\n }\n if (file.type && file.type.split('/')[0] == 'image') {\n // Handle inline image\n if (file.size > MAX_INBAND_ATTACHMENT_SIZE || SUPPORTED_IMAGE_FORMATS.indexOf(file.type) < 0) {\n imageFileScaledToBase64(file, MAX_IMAGE_DIM, MAX_IMAGE_DIM, false, onImageSuccess, onError);\n } else {\n imageFileToBase64(file, onImageSuccess, onError);\n }\n } else {\n // Handle file attachment\n fileToBase64(file, onAttachmentSuccess, onError)\n }\n // Indicate that the pasted data contains a file.\n return true;\n }\n }\n // No file found.\n return false;\n}\n\n// Get mime type from data URL header.\nexport function getMimeType(header) {\n var mime = /^data:(image\\/[-+a-z0-9.]+);base64/.exec(header);\n return (mime && mime.length > 1) ? mime[1] : null;\n}\n\n// Given length of a binary object in bytes, calculate the length after\n// base64 encoding.\nexport function base64EncodedLen(n) {\n return Math.floor((n + 2) / 3) * 4;\n}\n\n// Given length of a base64-encoded object, calculate decoded size of the\n// pbject in bytes.\nexport function base64DecodedLen(n) {\n return Math.floor(n / 4) * 3;\n}\n\n// Re-encode string to standard base64 encoding with padding.\n// The string may be base64-URL encoded without the padding.\nexport function base64ReEncode(str) {\n if (str) {\n str = str.replace(/-/g, '+').replace(/_/g, '/');\n try {\n str = btoa(atob(str));\n } catch(err) {\n console.log(\"Failed to base64 re-encode string.\", err);\n str = null;\n }\n }\n return str;\n}\n","import React from 'react';\n\nimport LetterTile from './letter-tile.jsx';\n\nimport { AVATAR_SIZE, MAX_EXTERN_ATTACHMENT_SIZE } from '../config.js';\nimport { imageScaled, blobToBase64, makeImageUrl } from '../lib/blob-helpers.js';\n\nexport default class AvatarUpload extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n dataUrl: props.avatar\n };\n\n this.handleFileUpload = this.handleFileUpload.bind(this);\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.avatar != prevProps.avatar) {\n this.setState({dataUrl: this.props.avatar})\n }\n }\n\n handleFileUpload(e) {\n imageScaled(e.target.files[0], AVATAR_SIZE, AVATAR_SIZE, MAX_EXTERN_ATTACHMENT_SIZE, true,\n // Image successfully scaled and converted.\n (mime, blob) => {\n // Convert blob to base64-encoded bits.\n blobToBase64(blob, (unused, base64bits) => {\n const du = makeImageUrl({data: base64bits, type: mime});\n this.setState({dataUrl: du});\n this.props.onImageChanged(du);\n });\n },\n // Failure\n (err) => {\n this.props.onError(err, 'err');\n });\n // Clear the value so the same file can be uploaded again.\n e.target.value = '';\n }\n\n render() {\n // Randomize id value in case more than one AvatarUpload is shown\n // at the same time.\n const randId = 'file-input-avatar-' + (Math.random() + '').substr(2);\n const className = 'avatar-upload' + (this.props.readOnly ? ' read-only' : '');\n return (\n
:\n this.props.readOnly && this.props.uid ?\n
: null}\n \n {contactNodes}\n
\n :\n null\n }\n \n \n );\n }\n\n return (\n {names[c]} \n {skip.indexOf(c) < 0 ?\n {this.props.compare ? \n : null}\n
: null}\n \n \n {this.props.compare ?\n
\n \n :\n null}\n \n {items}\n {this.props.modeTitle} \n {this.props.compareTitle} \n
\n field: the URL must be a relative URL or\n// have http:, https:, blob: or data: scheme.\n// The relative URL is appended with the API key and/or auth token.\n// In case of data: scheme, the URL must start with a 'data:image/XXXX;base64,'.\nexport function sanitizeImageUrl(url) {\n if (!url) {\n return null;\n }\n\n const sanitizedUrl = sanitizeUrl(url);\n if (sanitizedUrl) {\n return sanitizedUrl;\n }\n\n // Is this a data: URL of an image?\n if (/data:image\\/[a-z0-9.-]+;base64,/i.test(url.trim())) {\n return url;\n }\n\n return null;\n}\n","// TagManager: edit topic or user tags.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport ChipInput from './chip-input.jsx';\n\nimport { MAX_TAG_COUNT, MAX_TAG_LENGTH, MIN_TAG_LENGTH } from '../config.js';\nimport { arrayEqual } from '../lib/utils.js';\n\nexport default class TagManager extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n tags: this.props.tags,\n tagInput: '',\n activated: this.props.activated\n };\n\n this.handleTagInput = this.handleTagInput.bind(this);\n this.handleAddTag = this.handleAddTag.bind(this);\n this.handleRemoveTag = this.handleRemoveTag.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n }\n\n static getDerivedStateFromProps(nextProps, prevState) {\n if (!arrayEqual(nextProps.tags, prevState.tags) && !prevState.activated) {\n return {tags: nextProps.tags};\n }\n return null;\n }\n\n handleTagInput(text) {\n this.setState({tagInput: text});\n if (text.length > 0) {\n const last = text[text.length-1];\n if (text[0] == '\"') {\n // This is a quoted string.\n if (text.length > 1 && last == '\"') {\n this.handleAddTag(text.substring(1, text.length-1));\n }\n } else if (last == ',' || last == ' ' || last == ';' || last == '\"') {\n // User entered ',', ' ' or ';'\n this.handleAddTag(text.substring(0, text.length-1).trim());\n }\n }\n }\n\n handleAddTag(tag) {\n const maxTagCount = this.props.tinode.getServerLimit('maxTagCount', MAX_TAG_COUNT);\n\n if (tag.length > 0 && this.state.tags.length < maxTagCount) {\n const tags = this.state.tags.slice(0);\n tags.push(tag);\n\n this.setState({tags: tags, tagInput: ''});\n if (this.props.onTagsChanged) {\n this.props.onTagsChanged(tags);\n }\n return tags;\n }\n return this.state.tags;\n }\n\n handleRemoveTag(tag, index) {\n const tags = this.state.tags.slice(0);\n tags.splice(index, 1);\n this.setState({tags: tags});\n if (this.props.onTagsChanged) {\n this.props.onTagsChanged(tags);\n }\n }\n\n handleSubmit() {\n // Add unprocessed input to tags, submit the list.\n this.props.onSubmit(this.handleAddTag(this.state.tagInput.trim()));\n this.setState({activated: false, tags: this.props.tags});\n }\n\n handleCancel() {\n this.setState({activated: false, tagInput: '', tags: this.props.tags});\n if (this.props.onCancel) {\n this.props.onCancel();\n }\n }\n\n render() {\n const minTagLength = this.props.tinode.getServerLimit('minTagLength', MIN_TAG_LENGTH);\n const maxTagLength = this.props.tinode.getServerLimit('maxTagLength', MAX_TAG_LENGTH);\n\n let tags = [];\n if (this.state.activated) {\n this.state.tags.map((tag) => {\n tags.push({user: tag, invalid: (tag.length < minTagLength || tag.length > maxTagLength)});\n });\n } else {\n this.state.tags.map((tag) => {\n tags.push({tag});\n });\n if (tags.length == 0) {\n tags = (\n \n
.\n el = UploadingImage;\n }\n }\n break;\n case 'BN':\n // Button\n attr.onClick = this.handleFormButtonClick;\n let inner = React.Children.map(values, (child) => {\n return typeof child == 'string' ? child : undefined;\n });\n if (!inner || inner.length == 0) {\n inner = [attr.name]\n }\n // Get text which will be sent back when the button is clicked.\n attr['data-title'] = inner.join('');\n break;\n case 'FM':\n // Form\n attr.className = 'bot-form';\n break;\n case 'FE':\n // Form element formatting is dependent on element content.\n break;\n }\n return React.createElement(el, attr, values);\n } else {\n return values;\n }\n};\n","// Send message form.\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { Drafty } from 'tinode-sdk';\n\nimport { KEYPRESS_DELAY } from '../config.js';\nimport { filePasted } from '../lib/blob-helpers.js';\n\nconst messages = defineMessages({\n 'messaging_disabled': {\n id: 'messaging_disabled_prompt',\n defaultMessage: 'Messaging disabled',\n description: 'Prompt in SendMessage in read-only topic'\n },\n 'type_new_message': {\n id: 'new_message_prompt',\n defaultMessage: 'New message',\n description: 'Prompt in send message field'\n },\n 'add_image_caption': {\n id: 'image_caption_prompt',\n defaultMessage: 'Image caption',\n description: 'Prompt in SendMessage for attached image'\n },\n 'file_attachment_too_large': {\n id: 'file_attachment_too_large',\n defaultMessage: 'The file size {size} exceeds the {limit} limit.',\n description: 'Error message when attachment is too large'\n },\n 'cannot_initiate_upload': {\n id: 'cannot_initiate_file_upload',\n defaultMessage: 'Cannot initiate file upload.',\n description: 'Generic error messagewhen attachment fails'\n },\n});\n\nclass SendMessage extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n message: '',\n // Make initial keypress time as if it happened 5001 milliseconds in the past.\n keypressTimestamp: new Date().getTime() - KEYPRESS_DELAY - 1\n };\n\n this.handlePasteEvent = this.handlePasteEvent.bind(this);\n this.handleAttachImage = this.handleAttachImage.bind(this);\n this.handleAttachFile = this.handleAttachFile.bind(this);\n this.handleSend = this.handleSend.bind(this);\n this.handleKeyPress = this.handleKeyPress.bind(this);\n this.handleMessageTyping = this.handleMessageTyping.bind(this);\n }\n\n componentDidMount() {\n if (this.messageEditArea) {\n this.messageEditArea.addEventListener('paste', this.handlePasteEvent, false);\n }\n }\n\n componentWillUnmount() {\n if (this.messageEditArea) {\n this.messageEditArea.removeEventListener('paste', this.handlePasteEvent, false);\n }\n }\n\n componentDidUpdate() {\n if (this.messageEditArea) {\n this.messageEditArea.focus();\n }\n }\n\n handlePasteEvent(e) {\n if (this.props.disabled) {\n return;\n }\n // FIXME: handle large files too.\n if (filePasted(e,\n (bits, mime, width, height, fname) => {\n this.props.onAttachImage(mime, bits, width, height, fname);\n },\n (mime, bits, fname) => {\n this.props.onAttachFile(mime, bits, fname);\n },\n this.props.onError)) {\n\n // If a file was pasted, don't paste base64 data into input field.\n e.preventDefault();\n }\n }\n\n handleAttachImage(e) {\n if (e.target.files && e.target.files.length > 0) {\n this.props.onAttachImage(e.target.files[0]);\n }\n // Clear the value so the same file can be uploaded again.\n e.target.value = '';\n }\n\n handleAttachFile(e) {\n const {formatMessage} = this.props.intl;\n if (e.target.files && e.target.files.length > 0) {\n this.props.onAttachFile(e.target.files[0]);\n }\n // Clear the value so the same file can be uploaded again.\n e.target.value = '';\n }\n\n handleSend(e) {\n e.preventDefault();\n const message = this.state.message.trim();\n if (message || this.props.acceptBlank || this.props.noInput) {\n this.props.onSendMessage(message);\n this.setState({message: ''});\n }\n }\n\n /* Send on Enter key */\n handleKeyPress(e) {\n // Remove this if you don't want Enter to trigger send\n if (e.key === 'Enter') {\n // Have Shift-Enter insert a line break instead\n if (!e.shiftKey) {\n e.preventDefault();\n e.stopPropagation();\n\n this.handleSend(e);\n }\n }\n }\n\n handleMessageTyping(e) {\n const newState = {message: e.target.value};\n if (this.props.onKeyPress) {\n const now = new Date().getTime();\n if (now - this.state.keypressTimestamp > KEYPRESS_DELAY) {\n this.props.onKeyPress();\n newState.keypressTimestamp = now;\n }\n }\n this.setState(newState);\n }\n\n render() {\n const {formatMessage} = this.props.intl;\n const prompt = this.props.disabled ?\n formatMessage(messages.messaging_disabled) :\n (this.props.messagePrompt ?\n formatMessage(messages[this.props.messagePrompt]) :\n formatMessage(messages.type_new_message));\n return (\n
\n
\n {messageNodes}\n
\n \n {menu}\n
\n );\n }\n}\n\nexport default injectIntl(ContextMenu);\n","// Short representation of time in the past.\nexport function shortDateFormat(then, locale) {\n locale = locale || window.navigator.userLanguage || window.navigator.language;\n const now = new Date();\n if (then.getFullYear() == now.getFullYear()) {\n if (then.getMonth() == now.getMonth() && then.getDate() == now.getDate()) {\n\t return then.toLocaleTimeString(locale, {hour12: false, hour: '2-digit', minute: '2-digit'});\n } else {\n\t return then.toLocaleDateString(locale,\n {hour12: false, month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit'});\n }\n }\n return then.toLocaleDateString(locale,\n {hour12: false, year: 'numeric', month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit'});\n}\n\n// Convert seconds to minutes:seconds, i.e. 156 sec -> 2:36.\nexport function secondsToTime(seconds) {\n const min = Math.floor(seconds / 60);\n let sec = seconds % 60;\n sec = sec < 10 ? `0${sec}` : sec;\n return `${min}:${sec}`;\n}\n\n// Convert a number of bytes to human-readable format.\nexport function bytesToHumanSize(bytes) {\n if (!bytes || bytes == 0) {\n return '0 Bytes';\n }\n\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n const bucket = Math.min(Math.floor(Math.log2(bytes) / 10) | 0, sizes.length-1);\n const count = bytes / Math.pow(1024, bucket);\n const round = bucket > 0 ? (count < 3 ? 2 : (count < 30 ? 1 : 0)) : 0;\n return count.toFixed(round) + ' ' + sizes[bucket];\n}\n\n// Get 32 bit integer hash value for a string. Ideally it should produce the same value\n// as Java's String#hash().\nexport function stringHash(value) {\n let hash = 0;\n value = '' + value;\n for (let i = 0; i < value.length; i++) {\n hash = ((hash << 5) - hash) + value.charCodeAt(i);\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash;\n}\n","import React from 'react';\n\nimport Tinode from 'tinode-sdk';\n\nimport { stringHash } from '../lib/strformat.js';\n\nexport default class LetterTile extends React.PureComponent {\n render() {\n let avatar;\n if (this.props.avatar === true) {\n const isGroup = (Tinode.topicType(this.props.topic) == 'grp');\n const iconColor = (isGroup ? 'light-color' : 'dark-color')\n + (Math.abs(stringHash(this.props.topic)) % 16);\n if (this.props.topic && this.props.title && this.props.title.trim()) {\n const letter = this.props.title.trim().charAt(0);\n const className = 'lettertile ' + iconColor;\n avatar = ({e.target.onerror = null; e.target.src=\"/img/broken_image.png\"}} />;\n } else {\n avatar = null;\n }\n return avatar;\n }\n}\n","// File and image helper functions.\nimport { MAX_INBAND_ATTACHMENT_SIZE, MAX_IMAGE_DIM } from '../config.js';\nimport { bytesToHumanSize } from './strformat.js'\n\n// Supported image MIME types and corresponding file extensions.\nexport const SUPPORTED_IMAGE_FORMATS = ['image/jpeg', 'image/gif', 'image/png', 'image/svg', 'image/svg+xml'];\nexport const MIME_EXTENSIONS = ['jpg', 'gif', 'png', 'svg', 'svg'];\n\n// Make a data URL from public.photo\nexport function makeImageUrl(photo) {\n return (photo && photo.type && photo.data) ?\n 'data:image/' + photo.type + ';base64,' + photo.data : null;\n}\n\n// Calculate linear dimensions for scaling image down to fit under a certain size.\n// Returns an object which contains destination sizes, source sizes, and offsets\n// into source (when making square images).\nexport function fitImageSize(width, height, maxWidth, maxHeight, forceSquare) {\n // Sanitize input\n width = width | 0;\n height = height | 0;\n maxWidth = maxWidth | 0;\n maxHeight = maxHeight | 0;\n\n if (width <= 0 || height <= 0 || maxWidth <= 0 || maxHeight <= 0) {\n return null;\n }\n\n if (forceSquare) {\n maxWidth = maxHeight = Math.min(maxWidth, maxHeight);\n }\n\n let scale = Math.min(\n Math.min(width, maxWidth) / width,\n Math.min(height, maxHeight) / height\n );\n\n let size = {\n dstWidth: (width * scale) | 0,\n dstHeight: (height * scale) | 0,\n };\n\n if (forceSquare) {\n // Also calculate parameters for making the image square.\n size.dstWidth = size.dstHeight = Math.min(size.dstWidth, size.dstHeight);\n size.srcWidth = size.srcHeight = Math.min(width, height);\n size.xoffset = ((width - size.srcWidth) / 2) | 0;\n size.yoffset = ((height - size.srcWidth) / 2) | 0;\n } else {\n size.xoffset = size.yoffset = 0;\n size.srcWidth = width;\n size.srcHeight = height;\n }\n return size;\n}\n\n// Ensure file's extension matches mime content type\nexport function fileNameForMime(fname, mime) {\n const idx = SUPPORTED_IMAGE_FORMATS.indexOf(mime);\n if (idx < 0 || !fname) {\n // Unknown mime or empty name.\n return fname;\n }\n const ext = MIME_EXTENSIONS[idx];\n\n const at = fname.lastIndexOf('.');\n if (at >= 0) {\n fname = fname.substring(0, at);\n }\n return fname + '.' + ext;\n}\n\n// Scale uploaded image to fit under certain dimensions and byte size, optionally constraining to a square.\n// On success calls onSuccess callback with the scaled image as Blob.\nexport function imageScaled(fileOrBlob, maxWidth, maxHeight, maxSize, forceSquare, onSuccess, onError) {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onerror = function(err) {\n onError(\"Image format unrecognized\");\n }\n img.onload = async function() {\n // Once the image is loaded, the URL is no longer needed.\n URL.revokeObjectURL(img.src);\n\n // Calculate the desired image dimensions.\n const dim = fitImageSize(this.width, this.height, maxWidth, maxHeight, forceSquare);\n if (!dim) {\n onError(\"Invalid image\");\n return;\n }\n let canvas = document.createElement('canvas');\n canvas.width = dim.dstWidth;\n canvas.height = dim.dstHeight;\n let ctx = canvas.getContext('2d');\n ctx.imageSmoothingEnabled = true;\n ctx.drawImage(this, dim.xoffset, dim.yoffset, dim.srcWidth, dim.srcHeight,\n 0, 0, dim.dstWidth, dim.dstHeight);\n\n const mime = SUPPORTED_IMAGE_FORMATS.indexOf(fileOrBlob.type) < 0 ? 'image/jpeg' : fileOrBlob.type;\n // Generate blob to check size of the image.\n let blob = await new Promise(resolve => canvas.toBlob(resolve, mime));\n if (!blob) {\n onError(\"Unsupported image format\");\n return;\n }\n\n // Ensure the image is not too large. Shrink the image keeping the aspect ratio.\n // Do nothing if maxsize is <= 0.\n while (maxSize > 0 && blob.length > maxSize) {\n dim.dstWidth = (dim.dstWidth * 0.70710678118) | 0;\n dim.dstHeight = (dim.dstHeight * 0.70710678118) | 0;\n canvas.width = dim.dstWidth;\n canvas.height = dim.dstHeight;\n ctx = canvas.getContext('2d');\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(this, dim.xoffset, dim.yoffset, dim.srcWidth, dim.srcHeight,\n 0, 0, dim.dstWidth, dim.dstHeight);\n blob = await new Promise(resolve => canvas.toBlob(resolve, mime));\n }\n\n canvas = null;\n onSuccess(blob, mime, dim.dstWidth, dim.dstHeight, fileNameForMime(fileOrBlob.name, mime));\n };\n img.src = URL.createObjectURL(fileOrBlob);\n}\n\n// Convert File to base64 string.\nexport function fileToBase64(file, onSuccess) {\n const reader = new FileReader();\n reader.addEventListener('load', function() {\n onSuccess(file.type, reader.result.split(',')[1], file.name);\n });\n reader.readAsDataURL(file);\n}\n\n// Convert Blob to base64 string.\nexport function blobToBase64(blob, onSuccess) {\n const reader = new FileReader();\n reader.addEventListener('load', function() {\n onSuccess(blob.type, reader.result.split(',')[1]);\n });\n reader.readAsDataURL(blob);\n}\n\n// File pasted from the clipboard. It's either an inline image or a file attachment.\n// FIXME: handle large files out of band.\nexport function filePasted(event, onImageSuccess, onAttachmentSuccess, onError) {\n var items = (event.clipboardData || event.originalEvent.clipboardData || {}).items;\n for (var i in items) {\n var item = items[i];\n if (item.kind === 'file') {\n var file = item.getAsFile();\n if (!file) {\n console.log(\"Failed to get file object from pasted file item\", item.kind, item.type);\n continue;\n }\n if (file.type && file.type.split('/')[0] == 'image') {\n // Handle inline image\n if (file.size > MAX_INBAND_ATTACHMENT_SIZE || SUPPORTED_IMAGE_FORMATS.indexOf(file.type) < 0) {\n imageFileScaledToBase64(file, MAX_IMAGE_DIM, MAX_IMAGE_DIM, false, onImageSuccess, onError);\n } else {\n imageFileToBase64(file, onImageSuccess, onError);\n }\n } else {\n // Handle file attachment\n fileToBase64(file, onAttachmentSuccess, onError)\n }\n // Indicate that the pasted data contains a file.\n return true;\n }\n }\n // No file found.\n return false;\n}\n\n// Get mime type from data URL header.\nexport function getMimeType(header) {\n var mime = /^data:(image\\/[-+a-z0-9.]+);base64/.exec(header);\n return (mime && mime.length > 1) ? mime[1] : null;\n}\n\n// Given length of a binary object in bytes, calculate the length after\n// base64 encoding.\nexport function base64EncodedLen(n) {\n return Math.floor((n + 2) / 3) * 4;\n}\n\n// Given length of a base64-encoded object, calculate decoded size of the\n// pbject in bytes.\nexport function base64DecodedLen(n) {\n return Math.floor(n / 4) * 3;\n}\n\n// Re-encode string to standard base64 encoding with padding.\n// The string may be base64-URL encoded without the padding.\nexport function base64ReEncode(str) {\n if (str) {\n str = str.replace(/-/g, '+').replace(/_/g, '/');\n try {\n str = btoa(atob(str));\n } catch(err) {\n console.log(\"Failed to base64 re-encode string.\", err);\n str = null;\n }\n }\n return str;\n}\n","import React from 'react';\n\nimport LetterTile from './letter-tile.jsx';\n\nimport { AVATAR_SIZE, MAX_EXTERN_ATTACHMENT_SIZE } from '../config.js';\nimport { imageScaled, blobToBase64, makeImageUrl } from '../lib/blob-helpers.js';\n\nexport default class AvatarUpload extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n dataUrl: props.avatar\n };\n\n this.handleFileUpload = this.handleFileUpload.bind(this);\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.avatar != prevProps.avatar) {\n this.setState({dataUrl: this.props.avatar})\n }\n }\n\n handleFileUpload(e) {\n imageScaled(e.target.files[0], AVATAR_SIZE, AVATAR_SIZE, MAX_EXTERN_ATTACHMENT_SIZE, true,\n // Image successfully scaled and converted.\n (mime, blob) => {\n // Convert blob to base64-encoded bits.\n blobToBase64(blob, (unused, base64bits) => {\n const du = makeImageUrl({data: base64bits, type: mime});\n this.setState({dataUrl: du});\n this.props.onImageChanged(du);\n });\n },\n // Failure\n (err) => {\n this.props.onError(err, 'err');\n });\n // Clear the value so the same file can be uploaded again.\n e.target.value = '';\n }\n\n render() {\n // Randomize id value in case more than one AvatarUpload is shown\n // at the same time.\n const randId = 'file-input-avatar-' + (Math.random() + '').substr(2);\n const className = 'avatar-upload' + (this.props.readOnly ? ' read-only' : '');\n return (\n
:\n this.props.readOnly && this.props.uid ?\n
: null}\n \n {contactNodes}\n
\n :\n null\n }\n \n \n );\n }\n\n return (\n {names[c]} \n {skip.indexOf(c) < 0 ?\n {this.props.compare ? \n : null}\n
: null}\n \n \n {this.props.compare ?\n
\n \n :\n null}\n \n {items}\n {this.props.modeTitle} \n {this.props.compareTitle} \n
\n field: the URL must be a relative URL or\n// have http:, https:, blob: or data: scheme.\n// The relative URL is appended with the API key and/or auth token.\n// In case of data: scheme, the URL must start with a 'data:image/XXXX;base64,'.\nexport function sanitizeImageUrl(url) {\n if (!url) {\n return null;\n }\n\n const sanitizedUrl = sanitizeUrl(url);\n if (sanitizedUrl) {\n return sanitizedUrl;\n }\n\n // Is this a data: URL of an image?\n if (/data:image\\/[a-z0-9.-]+;base64,/i.test(url.trim())) {\n return url;\n }\n\n return null;\n}\n","// TagManager: edit topic or user tags.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport ChipInput from './chip-input.jsx';\n\nimport { MAX_TAG_COUNT, MAX_TAG_LENGTH, MIN_TAG_LENGTH } from '../config.js';\nimport { arrayEqual } from '../lib/utils.js';\n\nexport default class TagManager extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n tags: this.props.tags,\n tagInput: '',\n activated: this.props.activated\n };\n\n this.handleTagInput = this.handleTagInput.bind(this);\n this.handleAddTag = this.handleAddTag.bind(this);\n this.handleRemoveTag = this.handleRemoveTag.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n }\n\n static getDerivedStateFromProps(nextProps, prevState) {\n if (!arrayEqual(nextProps.tags, prevState.tags) && !prevState.activated) {\n return {tags: nextProps.tags};\n }\n return null;\n }\n\n handleTagInput(text) {\n this.setState({tagInput: text});\n if (text.length > 0) {\n const last = text[text.length-1];\n if (text[0] == '\"') {\n // This is a quoted string.\n if (text.length > 1 && last == '\"') {\n this.handleAddTag(text.substring(1, text.length-1));\n }\n } else if (last == ',' || last == ' ' || last == ';' || last == '\"') {\n // User entered ',', ' ' or ';'\n this.handleAddTag(text.substring(0, text.length-1).trim());\n }\n }\n }\n\n handleAddTag(tag) {\n const maxTagCount = this.props.tinode.getServerLimit('maxTagCount', MAX_TAG_COUNT);\n\n if (tag.length > 0 && this.state.tags.length < maxTagCount) {\n const tags = this.state.tags.slice(0);\n tags.push(tag);\n\n this.setState({tags: tags, tagInput: ''});\n if (this.props.onTagsChanged) {\n this.props.onTagsChanged(tags);\n }\n return tags;\n }\n return this.state.tags;\n }\n\n handleRemoveTag(tag, index) {\n const tags = this.state.tags.slice(0);\n tags.splice(index, 1);\n this.setState({tags: tags});\n if (this.props.onTagsChanged) {\n this.props.onTagsChanged(tags);\n }\n }\n\n handleSubmit() {\n // Add unprocessed input to tags, submit the list.\n this.props.onSubmit(this.handleAddTag(this.state.tagInput.trim()));\n this.setState({activated: false, tags: this.props.tags});\n }\n\n handleCancel() {\n this.setState({activated: false, tagInput: '', tags: this.props.tags});\n if (this.props.onCancel) {\n this.props.onCancel();\n }\n }\n\n render() {\n const minTagLength = this.props.tinode.getServerLimit('minTagLength', MIN_TAG_LENGTH);\n const maxTagLength = this.props.tinode.getServerLimit('maxTagLength', MAX_TAG_LENGTH);\n\n let tags = [];\n if (this.state.activated) {\n this.state.tags.map((tag) => {\n tags.push({user: tag, invalid: (tag.length < minTagLength || tag.length > maxTagLength)});\n });\n } else {\n this.state.tags.map((tag) => {\n tags.push({tag});\n });\n if (tags.length == 0) {\n tags = (\n \n
.\n el = UploadingImage;\n }\n }\n break;\n case 'BN':\n // Button\n attr.onClick = this.handleFormButtonClick;\n let inner = React.Children.map(values, (child) => {\n return typeof child == 'string' ? child : undefined;\n });\n if (!inner || inner.length == 0) {\n inner = [attr.name]\n }\n // Get text which will be sent back when the button is clicked.\n attr['data-title'] = inner.join('');\n break;\n case 'FM':\n // Form\n attr.className = 'bot-form';\n break;\n case 'FE':\n // Form element formatting is dependent on element content.\n break;\n }\n return React.createElement(el, attr, values);\n } else {\n return values;\n }\n};\n","// Send message form.\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { Drafty } from 'tinode-sdk';\n\nimport { KEYPRESS_DELAY } from '../config.js';\nimport { filePasted } from '../lib/blob-helpers.js';\n\nconst messages = defineMessages({\n messaging_disabled: {\n id: 'messaging_disabled_prompt',\n defaultMessage: 'Messaging disabled',\n description: 'Prompt in SendMessage in read-only topic'\n },\n type_new_message: {\n id: 'new_message_prompt',\n defaultMessage: 'New message',\n description: 'Prompt in send message field'\n },\n add_image_caption: {\n id: 'image_caption_prompt',\n defaultMessage: 'Image caption',\n description: 'Prompt in SendMessage for attached image'\n },\n file_attachment_too_large: {\n id: 'file_attachment_too_large',\n defaultMessage: 'The file size {size} exceeds the {limit} limit.',\n description: 'Error message when attachment is too large'\n },\n cannot_initiate_upload: {\n id: 'cannot_initiate_file_upload',\n defaultMessage: 'Cannot initiate file upload.',\n description: 'Generic error messagewhen attachment fails'\n },\n});\n\nclass SendMessage extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n message: '',\n // Make initial keypress time as if it happened 5001 milliseconds in the past.\n keypressTimestamp: new Date().getTime() - KEYPRESS_DELAY - 1\n };\n\n this.handlePasteEvent = this.handlePasteEvent.bind(this);\n this.handleAttachImage = this.handleAttachImage.bind(this);\n this.handleAttachFile = this.handleAttachFile.bind(this);\n this.handleSend = this.handleSend.bind(this);\n this.handleKeyPress = this.handleKeyPress.bind(this);\n this.handleMessageTyping = this.handleMessageTyping.bind(this);\n }\n\n componentDidMount() {\n if (this.messageEditArea) {\n this.messageEditArea.addEventListener('paste', this.handlePasteEvent, false);\n }\n }\n\n componentWillUnmount() {\n if (this.messageEditArea) {\n this.messageEditArea.removeEventListener('paste', this.handlePasteEvent, false);\n }\n }\n\n componentDidUpdate() {\n if (this.messageEditArea) {\n this.messageEditArea.focus();\n }\n }\n\n handlePasteEvent(e) {\n if (this.props.disabled) {\n return;\n }\n // FIXME: handle large files too.\n if (filePasted(e,\n (bits, mime, width, height, fname) => {\n this.props.onAttachImage(mime, bits, width, height, fname);\n },\n (mime, bits, fname) => {\n this.props.onAttachFile(mime, bits, fname);\n },\n this.props.onError)) {\n\n // If a file was pasted, don't paste base64 data into input field.\n e.preventDefault();\n }\n }\n\n handleAttachImage(e) {\n if (e.target.files && e.target.files.length > 0) {\n this.props.onAttachImage(e.target.files[0]);\n }\n // Clear the value so the same file can be uploaded again.\n e.target.value = '';\n }\n\n handleAttachFile(e) {\n const {formatMessage} = this.props.intl;\n if (e.target.files && e.target.files.length > 0) {\n this.props.onAttachFile(e.target.files[0]);\n }\n // Clear the value so the same file can be uploaded again.\n e.target.value = '';\n }\n\n handleSend(e) {\n e.preventDefault();\n const message = this.state.message.trim();\n if (message || this.props.acceptBlank || this.props.noInput) {\n this.props.onSendMessage(message);\n this.setState({message: ''});\n }\n }\n\n /* Send on Enter key */\n handleKeyPress(e) {\n // Remove this if you don't want Enter to trigger send\n if (e.key === 'Enter') {\n // Have Shift-Enter insert a line break instead\n if (!e.shiftKey) {\n e.preventDefault();\n e.stopPropagation();\n\n this.handleSend(e);\n }\n }\n }\n\n handleMessageTyping(e) {\n const newState = {message: e.target.value};\n if (this.props.onKeyPress) {\n const now = new Date().getTime();\n if (now - this.state.keypressTimestamp > KEYPRESS_DELAY) {\n this.props.onKeyPress();\n newState.keypressTimestamp = now;\n }\n }\n this.setState(newState);\n }\n\n render() {\n const {formatMessage} = this.props.intl;\n const prompt = this.props.disabled ?\n formatMessage(messages.messaging_disabled) :\n (this.props.messagePrompt ?\n formatMessage(messages[this.props.messagePrompt]) :\n formatMessage(messages.type_new_message));\n return (\n
\n
\n {messageNodes}\n
\n "},close:function(){return""}},CO:{open:function(){return""},close:function(){return""}},BR:{open:function(){return"
"},close:function(){return""}},HD:{open:function(){return""},close:function(){return""}},LN:{open:function(e){return''},close:function(e){return""},props:function(e){return e?{href:e.url,target:"_blank"}:null}},MN:{open:function(e){return''},close:function(e){return""},props:function(e){return e?{name:e.val}:null}},HT:{open:function(e){return''},close:function(e){return""},props:function(e){return e?{name:e.val}:null}},BN:{open:function(e){return""},props:function(e){return e?{"data-act":e.act,"data-val":e.val,"data-name":e.name,"data-ref":e.ref}:null}},IM:{open:function(e){const t=c(e._tempPreview,e.mime),n=a(e.val,e.mime),s=e.ref||n;return(e.name?'':"")+''},close:function(e){return e.name?"":""},props:function(e){return e?{src:c(e._tempPreview,e.mime)||e.ref||a(e.val,e.mime),title:e.name,"data-width":e.width,"data-height":e.height,"data-name":e.name,"data-size":e.val?.75*e.val.length|0:0|e.size,"data-mime":e.mime}:null}},FM:{open:function(e){return"
{if(e.code>=300)return e;if(this._subscribed=!0,this.acs=e.params&&e.params.acs?e.params.acs:this.acs,this._new){if(this._new=!1,this.name=e.topic,this.created=e.ts,this.updated=e.ts,this._cachePutSelf(),this.name!=l&&this.name!=d){const t=this._tinode.getMeTopic();t&&t._processMetaSub([{_noForwarding:!0,topic:this.name,created:e.ts,updated:e.ts,acs:this.acs}])}t&&t.desc&&(t.desc._noForwarding=!0,this._processMetaDesc(t.desc))}return e}))},createMessage:function(e,t){return this._tinode.createMessage(this.name,e,t)},publish:function(e,t){return this.publishMessage(this.createMessage(e,t))},publishMessage:function(e){if(!this._subscribed)return Promise.reject(new Error("Cannot publish on inactive topic"));if(s.hasAttachments(e.content)&&!e.head.attachments){let t=[];s.attachments(e.content,(e=>{t.push(e.ref)})),e.head.attachments=t}return e._sending=!0,e._failed=!1,this._tinode.publishMessage(e).then((t=>(e._sending=!1,e.ts=t.ts,this.swapMessageId(e,t.params.seq),this._routeData(e),t))).catch((t=>{this._tinode.logger("WARNING: Message rejected by the server",t),e._sending=!1,e._failed=!0,this.onData&&this.onData()}))},publishDraft:function(e,t){if(!t&&!this._subscribed)return Promise.reject(new Error("Cannot publish on inactive topic"));const n=e.seq||this._getQueuedSeqId();return e._noForwarding||(e._noForwarding=!0,e.seq=n,e.ts=new Date,e.from=this._tinode.getCurrentUserID(),e.noecho=!0,this._messages.put(e),this.onData&&this.onData(e)),t=(t||Promise.resolve()).then((()=>e._cancelled?{code:300,text:"cancelled"}:this.publishMessage(e)),(t=>{this._tinode.logger("WARNING: Message draft rejected",t),e._sending=!1,e._failed=!0,this._messages.delAt(this._messages.find(e)),this.onData&&this.onData()}))},leave:function(e){return this._subscribed||e?this._tinode.leave(this.name,e).then((t=>(this._resetSub(),e&&(this._tinode.cacheDel("topic",this.name),this._gone()),t))):Promise.reject(new Error("Cannot leave inactive topic"))},getMeta:function(e){return this._tinode.getMeta(this.name,e)},getMessagesPage:function(e,t){const n=this.startMetaQuery();t?n.withLaterData(e):n.withEarlierData(e);let s=this.getMeta(n.build());return t||(s=s.then((e=>{e&&e.params&&!e.params.count&&(this._noEarlierMsgs=!0)}))),s},setMeta:function(e){return e.tags&&(e.tags=function(e){let t=[];if(Array.isArray(e)){for(let n=0,s=e.length;n1&&t.push(s))}t.sort().filter((function(e,t,n){return!t||e!=n[t-1]}))}return 0==t.length&&t.push(D.DEL_CHAR),t}(e.tags)),this._tinode.setMeta(this.name,e).then((t=>(t&&t.code>=300||(e.sub&&(e.sub.topic=this.name,t.params&&t.params.acs&&(e.sub.acs=t.params.acs,e.sub.updated=t.ts),e.sub.user||(e.sub.user=this._tinode.getCurrentUserID(),e.desc||(e.desc={})),e.sub._noForwarding=!0,this._processMetaSub([e.sub])),e.desc&&(t.params&&t.params.acs&&(e.desc.acs=t.params.acs,e.desc.updated=t.ts),this._processMetaDesc(e.desc)),e.tags&&this._processMetaTags(e.tags),e.cred&&this._processMetaCreds([e.cred],!0)),t)))},updateMode:function(e,t){const n=e?this.subscriber(e):null,s=n?n.acs.updateGiven(t).getGiven():this.getAccessMode().updateWant(t).getWant();return this.setMeta({sub:{user:e,mode:s}})},invite:function(e,t){return this.setMeta({sub:{user:e,mode:t}})},archive:function(e){return this.private&&this.private.arch==e?Promise.resolve(e):this.setMeta({desc:{private:{arch:!!e||D.DEL_CHAR}}})},delMessages:function(e,t){if(!this._subscribed)return Promise.reject(new Error("Cannot delete messages in inactive topic"));e.sort(((e,t)=>e.low0&&this._messages.getAt(n-1).seq>=t||n+1=0?this._messages.delRange(n,this._messages.find({seq:t},!0)):[]},cancelSend:function(e){const t=this._messages.find({seq:e});if(t>=0){const e=this._messages.getAt(t),n=this.msgStatus(e);if(1==n||3==n)return e._cancelled=!0,this._messages.delAt(t),this.onData&&this.onData(),!0}return!1},getType:function(){return D.topicType(this.name)},getAccessMode:function(){return this.acs},getDefaultAccess:function(){return this.defacs},startMetaQuery:function(){return new R(this)},isArchived:function(){return!(!this.private||!this.private.arch)},isChannel:function(){return D.isChannelTopicName(this.name)},isGroup:function(){return D.isGroupTopicName(this.name)},isP2P:function(){return D.isP2PTopicName(this.name)},msgStatus:function(e){let t=0;return this._tinode.isMe(e.from)?e._sending?t=2:e._failed||e._cancelled?t=3:e.seq>=f?t=1:this.msgReadCount(e.seq)>0?t=6:this.msgRecvCount(e.seq)>0?t=5:e.seq>0&&(t=4):t=7,t},_routeData:function(e){e.content&&(!this.touched||this.touched0&&this.onSubsUpdated&&this.onSubsUpdated(Object.keys(this._contacts))},enumerable:!0,configurable:!0,writable:!1},publish:{value:function(){return Promise.reject(new Error("Publishing to 'fnd' is not supported"))},enumerable:!0,configurable:!0,writable:!1},setMeta:{value:function(e){const t=this;return Object.getPrototypeOf(k.prototype).setMeta.call(this,e).then((function(){Object.keys(t._contacts).length>0&&(t._contacts={},t.onSubsUpdated&&t.onSubsUpdated([]))}))},enumerable:!0,configurable:!0,writable:!1},contacts:{value:function(e,t){const n=e||this.onMetaSub;if(n)for(let e in this._contacts)n.call(t,this._contacts[e],e,this._contacts)},enumerable:!0,configurable:!0,writable:!0}}),k.prototype.constructor=k;var q=function(e){this._tinode=e,this._apiKey=e._apiKey,this._authToken=e.getAuthToken(),this._msgId=e.getNextUniqueId(),this.xhr=new XMLHttpRequest,this.toResolve=null,this.toReject=null,this.onProgress=null,this.onSuccess=null,this.onFailure=null};q.prototype={uploadWithBaseUrl:function(e,t,n,s,i){if(!this._authToken)throw new Error("Must authenticate first");const o=this;let r="/v0/file/u/";if(e){if(0!=e.indexOf("http://")&&0!=e.indexOf("https://"))throw new Error("Invalid base URL '"+e+"'");r=e+r}this.xhr.open("POST",r,!0),this.xhr.setRequestHeader("X-Tinode-APIKey",this._apiKey),this.xhr.setRequestHeader("X-Tinode-Auth","Token "+this._authToken.token);const a=new Promise(((e,t)=>{this.toResolve=e,this.toReject=t}));this.onProgress=n,this.onSuccess=s,this.onFailure=i,this.xhr.upload.onprogress=e=>{e.lengthComputable&&o.onProgress&&o.onProgress(e.loaded/e.total)},this.xhr.onload=function(){let e;try{e=JSON.parse(this.response,S)}catch(t){o._tinode.logger("ERROR: Invalid server response in LargeFileHelper",this.response),e={ctrl:{code:this.status,text:this.statusText}}}this.status>=200&&this.status<300?(o.toResolve&&o.toResolve(e.ctrl.params.url),o.onSuccess&&o.onSuccess(e.ctrl)):this.status>=400?(o.toReject&&o.toReject(new Error(e.ctrl.text+" ("+e.ctrl.code+")")),o.onFailure&&o.onFailure(e.ctrl)):o._tinode.logger("ERROR: Unexpected server response status",this.status,this.response)},this.xhr.onerror=function(e){o.toReject&&o.toReject(new Error("failed")),o.onFailure&&o.onFailure(null)},this.xhr.onabort=function(e){o.toReject&&o.toReject(new Error("upload cancelled by user")),o.onFailure&&o.onFailure(null)};try{const e=new FormData;e.append("file",t),e.set("id",this._msgId),this.xhr.send(e)}catch(e){this.toReject&&this.toReject(e),this.onFailure&&this.onFailure(null)}return a},upload:function(e,t,n,s){return this.uploadWithBaseUrl(void 0,e,t,n,s)},download:function(e,t,n,s,i){if(!D.isRelativeURL(e))return void(i&&i("The URL '"+e+"' must be relative, not absolute"));if(!this._authToken)return void(i&&i("Must authenticate first"));const o=this;this.xhr.open("GET",e,!0),this.xhr.setRequestHeader("X-Tinode-APIKey",this._apiKey),this.xhr.setRequestHeader("X-Tinode-Auth","Token "+this._authToken.token),this.xhr.responseType="blob",this.onProgress=s,this.xhr.onprogress=function(e){o.onProgress&&o.onProgress(e.loaded)};const r=new Promise(((e,t)=>{this.toResolve=e,this.toReject=t}));this.xhr.onload=function(){if(200==this.status){const e=document.createElement("a");e.href=window.URL.createObjectURL(new Blob([this.response],{type:n})),e.style.display="none",e.setAttribute("download",t),document.body.appendChild(e),e.click(),document.body.removeChild(e),window.URL.revokeObjectURL(e.href),o.toResolve&&o.toResolve()}else if(this.status>=400&&o.toReject){const e=new FileReader;e.onload=function(){try{const e=JSON.parse(this.result,S);o.toReject(new Error(e.ctrl.text+" ("+e.ctrl.code+")"))}catch(e){o._tinode.logger("ERROR: Invalid server response in LargeFileHelper",this.result),o.toReject(e)}},e.readAsText(this.response)}},this.xhr.onerror=function(e){o.toReject&&o.toReject(new Error("failed"))},this.xhr.onabort=function(){o.toReject&&o.toReject(null)};try{this.xhr.send()}catch(e){this.toReject&&this.toReject(e)}return r},cancel:function(){this.xhr&&this.xhr.readyState<4&&this.xhr.abort()},getId:function(){return this._msgId}};var U=function(e,t){this.status=U.STATUS_NONE,this.topic=e,this.content=t};U.STATUS_NONE=0,U.STATUS_QUEUED=1,U.STATUS_SENDING=2,U.STATUS_FAILED=3,U.STATUS_SENT=4,U.STATUS_RECEIVED=5,U.STATUS_READ=6,U.STATUS_TO_ME=7,U.prototype={toJSON:function(){},fromJSON:function(e){}},U.prototype.constructor=U,void 0!==t&&(t.exports=D,t.exports.Drafty=s,t.exports.AccessMode=A)}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../version.json":3,"./drafty.js":1}],3:[function(e,t,n){t.exports={version:"0.16.10"}},{}]},{},[2])(2)}));
\ No newline at end of file
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Tinode = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i
+ * this is *bold*, `code` and _italic_, ~strike~ + * combined *bold and _italic_* + * an url: https://www.example.com/abc#fragment and another _www.tinode.co_ + * this is a @mention and a #hashtag in a string + * second #hashtag + *+ * + * Sample JSON representation of the text above: + * { + * "txt": "this is bold, code and italic, strike combined bold and italic an url: https://www.example.com/abc#fragment " + + * "and another www.tinode.co this is a @mention and a #hashtag in a string second #hashtag", + * "fmt": [ + * { "at":8, "len":4,"tp":"ST" },{ "at":14, "len":4, "tp":"CO" },{ "at":23, "len":6, "tp":"EM"}, + * { "at":31, "len":6, "tp":"DL" },{ "tp":"BR", "len":1, "at":37 },{ "at":56, "len":6, "tp":"EM" }, + * { "at":47, "len":15, "tp":"ST" },{ "tp":"BR", "len":1, "at":62 },{ "at":120, "len":13, "tp":"EM" }, + * { "at":71, "len":36, "key":0 },{ "at":120, "len":13, "key":1 },{ "tp":"BR", "len":1, "at":133 }, + * { "at":144, "len":8, "key":2 },{ "at":159, "len":8, "key":3 },{ "tp":"BR", "len":1, "at":179 }, + * { "at":187, "len":8, "key":3 },{ "tp":"BR", "len":1, "at":195 } + * ], + * "ent": [ + * { "tp":"LN", "data":{ "url":"https://www.example.com/abc#fragment" } }, + * { "tp":"LN", "data":{ "url":"http://www.tinode.co" } }, + * { "tp":"MN", "data":{ "val":"mention" } }, + * { "tp":"HT", "data":{ "val":"hashtag" } } + * ] + * } + */ + +'use strict'; + +const MAX_FORM_ELEMENTS = 8; +const JSON_MIME_TYPE = 'application/json'; + +// Regular expressions for parsing inline formats. Javascript does not support lookbehind, +// so it's a bit messy. +const INLINE_STYLES = [ + // Strong = bold, *bold text* + { + name: 'ST', + start: /(?:^|[\W_])(\*)[^\s*]/, + end: /[^\s*](\*)(?=$|[\W_])/ + }, + // Emphesized = italic, _italic text_ + { + name: 'EM', + start: /(?:^|\W)(_)[^\s_]/, + end: /[^\s_](_)(?=$|\W)/ + }, + // Deleted, ~strike this though~ + { + name: 'DL', + start: /(?:^|[\W_])(~)[^\s~]/, + end: /[^\s~](~)(?=$|[\W_])/ + }, + // Code block `this is monospace` + { + name: 'CO', + start: /(?:^|\W)(`)[^`]/, + end: /[^`](`)(?=$|\W)/ + } +]; + +// RegExps for entity extraction (RF = reference) +const ENTITY_TYPES = [ + // URLs + { + name: 'LN', + dataName: 'url', + pack: function(val) { + // Check if the protocol is specified, if not use http + if (!/^[a-z]+:\/\//i.test(val)) { + val = 'http://' + val; + } + return { + url: val + }; + }, + re: /(?:(?:https?|ftp):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/ig + }, + // Mentions @user (must be 2 or more characters) + { + name: 'MN', + dataName: 'val', + pack: function(val) { + return { + val: val.slice(1) + }; + }, + re: /\B@(\w\w+)/g + }, + // Hashtags #hashtag, like metion 2 or more characters. + { + name: 'HT', + dataName: 'val', + pack: function(val) { + return { + val: val.slice(1) + }; + }, + re: /\B#(\w\w+)/g + } +]; + +// HTML tag name suggestions +const HTML_TAGS = { + ST: { + name: 'b', + isVoid: false + }, + EM: { + name: 'i', + isVoid: false + }, + DL: { + name: 'del', + isVoid: false + }, + CO: { + name: 'tt', + isVoid: false + }, + BR: { + name: 'br', + isVoid: true + }, + LN: { + name: 'a', + isVoid: false + }, + MN: { + name: 'a', + isVoid: false + }, + HT: { + name: 'a', + isVoid: false + }, + IM: { + name: 'img', + isVoid: true + }, + FM: { + name: 'div', + isVoid: false + }, + RW: { + name: 'div', + isVoid: false, + }, + BN: { + name: 'button', + isVoid: false + }, + HD: { + name: '', + isVoid: false + } +}; + +// Convert base64-encoded string into Blob. +function base64toObjectUrl(b64, contentType) { + if (!b64) { + return null; + } + + try { + const bin = atob(b64); + const length = bin.length; + const buf = new ArrayBuffer(length); + const arr = new Uint8Array(buf); + for (let i = 0; i < length; i++) { + arr[i] = bin.charCodeAt(i); + } + + return URL.createObjectURL(new Blob([buf], { + type: contentType + })); + } catch (err) { + console.log("Drafty: failed to convert object.", err.message); + } + + return null; +} + +function base64toDataUrl(b64, contentType) { + if (!b64) { + return null; + } + contentType = contentType || 'image/jpeg'; + return 'data:' + contentType + ';base64,' + b64; +} + +// Helpers for converting Drafty to HTML. +const DECORATORS = { + // Visial styles + ST: { + open: function() { + return ''; + }, + close: function() { + return ''; + } + }, + EM: { + open: function() { + return ''; + }, + close: function() { + return '' + } + }, + DL: { + open: function() { + return '