VulpesOS/assets/webapps/sms.gaiamobile.org/views/conversation/js/conversation.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

148 lines
No EOL
53 KiB
JavaScript

;(function(exports){'use strict';const SECOND=1000;const MINUTE=60*SECOND;const HOUR=60*MINUTE;const DAY=24*HOUR;const MONTH=30*DAY;var attachmentMap=new WeakMap();function conv_mmsAttachmentClick(target){var attachment=attachmentMap.get(target);if(!attachment){return false;}
attachment.view({allowSave:true});return true;}
function conv_generateSmilSlides(slides,content){var length=slides.length;if(typeof content==='string'){if(!length||slides[length-1].text){slides.push({text:content});}else{slides[length-1].text=content;}}else{slides.push({blob:content.blob,name:content.name});}
return slides;}
var ConversationView={FIRST_CHUNK_SIZE:10,CHUNK_SIZE:50,CONVERTED_MESSAGE_DURATION:3000,IMAGE_RESIZE_DURATION:3000,BANNER_DURATION:2000,ANOTHER_SMS_TOAST_DURATION:3000,LEAVE_ACTIVITY_DELAY:3000,THROTTLE_DELAY:300,THROTTLE_OPTS:{preventFirstCall:true,preventLastCall:false},LATE_NOTICE_LOWER_LIMITS:{NO_NOTICE:5*MINUTE,IN_HOURS:1*HOUR,IN_DAYS:1*DAY,IN_MONTHS:1*MONTH},draft:null,recipients:null,inEditMode:false,isNewMessageNoticeShown:false,shouldChangePanelNextEvent:false,showErrorInFailedEvent:'',previousSegment:0,buildingMessages:{},_isReady:false,timeouts:{update:null,subjectLengthNotice:null},multiSimActionButton:null,init:function conv_init(){var templateIds=['message','message-sim-information','message-status','late-arrival-notice','not-downloaded','recipient','date-group','header','group-header'];['container','to-field','recipients-list','compose-form','header','edit-header','check-uncheck-all-button','contact-pick-button','send-button','delete-button','call-number-button','options-button','new-message-notice','edit-mode','edit-form','header-text','max-length-notice','convert-notice','resize-notice','new-message-notice','subject-max-length-notice','sms-counter-notice','recipient-suggestions'].forEach(function(id){this[Utils.camelCase(id)]=document.getElementById('messages-'+id);},this);this.mainWrapper=document.getElementById('main-wrapper');this.threadMessages=document.querySelector('.panel-ConversationView');window.addEventListener('resize',this.resizeHandler.bind(this));this.onVisibilityChange=this.onVisibilityChange.bind(this);document.addEventListener('visibilitychange',this.onVisibilityChange);this.toField.addEventListener('keypress',Utils.throttle(this.toFieldKeypress.bind(this),this.THROTTLE_DELAY,this.THROTTLE_OPTS),true);this.toField.addEventListener('input',Utils.throttle(this.toFieldInput.bind(this),this.THROTTLE_DELAY,this.THROTTLE_OPTS),true);this.toField.addEventListener('focus',Utils.throttle(this.toFieldInput.bind(this),this.THROTTLE_DELAY,this.THROTTLE_OPTS),true);this.sendButton.addEventListener('click',this.onSendClick.bind(this));this.sendButton.addEventListener('contextmenu',this.onSendClick.bind(this));this.container.addEventListener('scroll',this.manageScroll.bind(this));this.editHeader.addEventListener('action',this.cancelEdit.bind(this));this.header.addEventListener('action',this.backOrClose.bind(this));this.optionsButton.addEventListener('click',this.showOptions.bind(this));this.callNumberButton.addEventListener('click',()=>{ActivityPicker.dial(this.activeThread.participants[0]);});this.deleteButton.addEventListener('click',this.delete.bind(this));this.headerText.addEventListener('click',this.onHeaderActivation.bind(this));this.newMessageNotice.addEventListener('click',this.onNewMessageNoticeClick.bind(this));this.container.addEventListener('click',this);this.container.addEventListener('contextmenu',this);this.editForm.addEventListener('submit',this);this.composeForm.addEventListener('submit',this);this.contactPickButton.addEventListener('mousedown',this.requestContact.bind(this));this.contactPickButton.addEventListener('click',function onClick(event){event.stopPropagation();});navigator.mozContacts.addEventListener('contactchange',this.updateHeaderData.bind(this));this.recipientSuggestions.addEventListener('click',this.onRecipientSuggestionClick.bind(this));MessageManager.on('message-sending',this.onMessageSending.bind(this));MessageManager.on('message-sent',this.onMessageSent.bind(this));MessageManager.on('message-received',this.onMessageReceived.bind(this));MessageManager.on('message-failed-to-send',this.onMessageFailed.bind(this));MessageManager.on('message-delivered',this.onDeliverySuccess.bind(this));MessageManager.on('message-read',this.onReadSuccess.bind(this));this.tmpl=templateIds.reduce(function(tmpls,name){tmpls[Utils.camelCase(name)]=Template('messages-'+name+'-tmpl');return tmpls;},{});Compose.init('messages-compose-form');Compose.on('input',this.onMessageContentChange.bind(this));Compose.on('subject-change',this.onSubjectChange.bind(this));Compose.on('segmentinfochange',this.onSegmentInfoChange.bind(this));Compose.on('interact',this.assimilateRecipients.bind(this));this.container.addEventListener('click',this.assimilateRecipients.bind(this));this.multiSimActionButton=null;this.timeouts.update=null;this.shouldChangePanelNextEvent=false;this.showErrorInFailedEvent='';this.onMessageTypeChange=this.onMessageTypeChange.bind(this);this._isReady=true;},isReady(){return this._isReady;},onVisibilityChange:function conv_onVisibilityChange(){var isDraftUpdateNeeded=document.hidden&&(Navigation.isCurrentPanel('composer')||Navigation.isCurrentPanel('thread'));if(isDraftUpdateNeeded){this.updateDraft();}},backOrClose:function conv_backOrClose(){this.stopRendering();var backOrClosePromise;if(ActivityClient.hasPendingRequest()){backOrClosePromise=this.updateDraft().then(()=>ActivityClient.postResult());}else{backOrClosePromise=this._ensureKeyboardIsHidden().then(()=>Navigation.toPanel('thread-list'));}
return backOrClosePromise.catch((e)=>{console.error('Unexpected error while navigating back: ',e);return Promise.reject(e);});},initRecipients:function conv_initRecipients(){var recipientsChanged=(function recipientsChanged(length,record){if(this.draft){this.draft.isEdited=true;}
var isOk=true;var strategy;if(record&&(record.isQuestionable||record.isLookupable)){if(record.isQuestionable){isOk=false;}
strategy=record.isLookupable?'searchContact':'exactContact';this[strategy](record.number).then((contacts)=>this.validateContact(record,record.number,contacts));}
this.toggleRecipientSuggestions();if(isOk){this.updateComposerHeader();Compose.refresh();}}).bind(this);if(this.recipients){this.recipients.length=0;this.recipients.visible('singleline');this.recipients.focus();}else{this.recipients=new Recipients({outer:'messages-to-field',inner:'messages-recipients-list',template:this.tmpl.recipient});this.recipients.on('add',recipientsChanged);this.recipients.on('remove',recipientsChanged);this.recipients.on('modechange',function(mode){this.threadMessages.classList.toggle('multiline-recipients-mode',mode==='multiline-mode');}.bind(this));}
this.toggleRecipientSuggestions();},hasValidRecipients(){if(this.recipients.numbers.length){return true;}
var notValidatedNumber=this.recipients.inputValue;return!!notValidatedNumber&&isFinite(notValidatedNumber);},hasEmailRecipients(){if(!Settings.supportEmailRecipient){return false;}
return this.recipients.numbers.some(Utils.isEmailAddress);},initSentAudio:function conv_initSentAudio(){if(this.sentAudio){return;}
this.sentAudio=new Audio();this.sentAudio.preload='none';this.sentAudio.src='/sounds/firefox_msg_sent.opus';this.sentAudio.mozAudioChannelType='notification';this.sentAudioKey='message.sent-sound.enabled';this.sentAudioEnabled=false;if(navigator.mozSettings){try{var req=navigator.mozSettings.createLock().get(this.sentAudioKey);req.onsuccess=(function onsuccess(){this.sentAudioEnabled=req.result[this.sentAudioKey];}).bind(this);navigator.mozSettings.addObserver(this.sentAudioKey,(function(e){this.sentAudioEnabled=e.settingValue;}).bind(this));}catch(e){this.sentAudioEnabled=false;}}},getIdIterator:function conv_getIdIterator(){return this.activeThread.messages.keys();},setHeaderAction:function conv_setHeaderAction(icon){this.header.setAttribute('action',icon);},onMessageContentChange(){if(this.draft){this.draft.isEdited=true;}
if(Compose.type==='sms'){this.hideMaxLengthNotice();return;}
if(Compose.isResizing){this.resizeNotice.classList.remove('hide');if(this._resizeNoticeTimeout){clearTimeout(this._resizeNoticeTimeout);this._resizeNoticeTimeout=null;}}else{this.checkMessageSize();if(this.resizeNotice.classList.contains('hide')||this._resizeNoticeTimeout){return;}
this._resizeNoticeTimeout=setTimeout(function hideResizeNotice(){this.resizeNotice.classList.add('hide');this._resizeNoticeTimeout=null;}.bind(this),this.IMAGE_RESIZE_DURATION);}},showMaxLengthNotice:function conv_showMaxLengthNotice(opts){document.l10n.setAttributes(this.maxLengthNotice.querySelector('p'),opts.l10nId,opts.l10nArgs);this.maxLengthNotice.classList.remove('hide');},hideMaxLengthNotice:function conv_hideMaxLengthNotice(){this.maxLengthNotice.classList.add('hide');},showSubjectMaxLengthNotice:function conv_showSubjectMaxLengthNotice(){this.subjectMaxLengthNotice.classList.remove('hide');if(this.timeouts.subjectLengthNotice){clearTimeout(this.timeouts.subjectLengthNotice);}
this.timeouts.subjectLengthNotice=setTimeout(this.hideSubjectMaxLengthNotice.bind(this),this.BANNER_DURATION);},hideSubjectMaxLengthNotice:function conv_hideSubjectMaxLengthNotice(){this.subjectMaxLengthNotice.classList.add('hide');this.timeouts.subjectLengthNotice&&clearTimeout(this.timeouts.subjectLengthNotice);},beforeEnter:function conv_beforeEnter(args){this.clearConvertNoticeBanners();this.setHeaderAction(ActivityClient.hasPendingRequest()?'close':'back');this.header.removeAttribute('no-font-fit');if(!this.multiSimActionButton){var gaiaSimPicker=document.getElementById('sim-picker');gaiaSimPicker.classList.remove('hide');this.multiSimActionButton=new MultiSimActionButton(this.sendButton,this.simSelectedCallback.bind(this),Settings.SERVICE_ID_KEYS.smsServiceId);this.initSentAudio();}
var next=args.meta.next.panel;switch(next){case'composer':return this.beforeEnterComposer(args);case'thread':return this.beforeEnterThread(args);default:console.error('preEnter was called with an unexpected panel name:',next);return Promise.reject();}},beforeEnterThread:function conv_beforeEnterThread(args){var threadId=+args.id;return MessageManager.ensureThreadRegistered(threadId).then(()=>{this.activeThread=Threads.get(threadId);var prevPanel=args.meta.prev;var emailThread=Settings.supportEmailRecipient&&this.activeThread.participants.some(Utils.isEmailAddress);Compose.setupLock({forceType:()=>emailThread?'mms':null});if(!prevPanel||prevPanel.panel!=='composer'){this.enableConvertNoticeBanners();}
if(!this.isConversationPanel(threadId,prevPanel)){this.initializeRendering();}
if(this.activeThread.participants.length===1&&!emailThread){this.callNumberButton.classList.remove('hide');}
return this.updateHeaderData();});},afterEnter:function conv_afterEnter(args){var next=args.meta.next.panel;switch(next){case'composer':return this.afterEnterComposer(args);case'thread':return this.afterEnterThread(args);default:console.error('afterEnter was called with an unexpected panel name:',next);return Promise.reject();}},afterEnterComposer:function conv_afterEnterComposer(args){var draftPromise=args.draftId?this.handleDraft(+args.draftId):Promise.resolve();return draftPromise.then(()=>{switch(args.focus){case'composer':Compose.focus();break;case'recipients':this.recipients.focus();break;default:if(this.hasValidRecipients()){Compose.focus();}else{this.recipients.focus();}
break;}
this.emit('visually-loaded');});},afterEnterThread:function conv_afterEnterThread(args){var threadId=+args.id;var prevPanel=args.meta.prev;if(!this.isConversationPanel(threadId,prevPanel)){this.renderMessages(threadId);Drafts.request().then(()=>{this.draft=Threads.get(threadId).getDraft();if(this.draft){Compose.fromDraft(this.draft);Compose.focus();this.draft.isEdited=false;}});}
App.whenReady().then(function(){setTimeout(()=>InboxView.markReadUnread([threadId],true));});if(prevPanel&&prevPanel.panel==='composer'){this.enableConvertNoticeBanners();}
if(args.focus==='composer'){Compose.focus();}
return Utils.closeNotificationsForThread(threadId);},beforeLeave:function conv_beforeLeave(args){this.disableConvertNoticeBanners();var nextPanel=args.meta.next;this.cancelEdit();if(Navigation.isCurrentPanel('thread')){this.activeThread.unreadCount=0;}
this.updateDraft();if(!this.activeThread||!this.isConversationPanel(this.activeThread.id,nextPanel)){this.draft=null;this.activeThread=null;this.cleanFields();}},afterLeave:function conv_afterLeave(args){if(Navigation.isCurrentPanel('thread-list')){this.clearContainer();this.cleanFields();}
if(!Navigation.isCurrentPanel('composer')){this.threadMessages.classList.remove('new');if(this.recipients){this.recipients.length=0;}
this.toggleRecipientSuggestions();}
if(!Navigation.isCurrentPanel('thread')){this.threadMessages.classList.remove('has-carrier');this.callNumberButton.classList.add('hide');}},handleDraft:function conv_handleDraft(draftId){return Drafts.request().then(()=>{this.draft=Drafts.byDraftId(draftId);if(!this.draft){return;}
Compose.fromDraft(this.draft);this.draft.isEdited=false;return Promise.all(this.draft.recipients.map((number)=>{return Contacts.findByAddress(number).then((contacts)=>{var recipient;if(contacts.length){recipient=Utils.basicContact(number,contacts[0]);recipient.source='contacts';}else{recipient={number:number,source:'manual'};}
this.recipients.add(recipient);this.draft.isEdited=false;});}));});},beforeEnterComposer(){Recipients.View.isFocusable=true;this.enableConvertNoticeBanners();this.clearContainer();this.cleanFields();this.initRecipients();this.updateComposerHeader();Compose.setupLock({canSend:()=>this.hasValidRecipients(),forceType:()=>this.hasEmailRecipients()?'mms':null});this.threadMessages.classList.add('new');return Promise.resolve();},assimilateRecipients:function conv_assimilateRecipients(){var isNew=Navigation.isCurrentPanel('composer');var node=this.recipientsList.lastChild;var typed;if(!isNew||node===null){return;}
Recipients.View.isFocusable=false;this.recipients.visible('singleline');do{if(node.isPlaceholder){typed=node.textContent.trim();if(typed===';'){node.textContent='';break;}
if(typed){this.recipients.add({name:typed,number:typed,source:'manual'});break;}}}while((node=node.previousSibling));},onMessage:function onMessage(message){Threads.registerMessage(message);return this.appendMessage(message).then(()=>TimeHeaders.updateAll('header[data-time-update]'));},isCurrentConversation:function conv_isCurrentConversation(conversationId){return Navigation.isCurrentPanel('thread',{id:conversationId})||Navigation.isCurrentPanel('report-view',{threadId:conversationId})||Navigation.isCurrentPanel('group-view',{id:conversationId});},isConversationPanel(id,panel){if(!panel){return false;}
id=+id;return panel.panel==='thread'&&+panel.args.id===id||panel.panel==='report-view'&&+panel.args.threadId===id||panel.panel==='group-view'&&+panel.args.id===id;},onMessageReceived:function conv_onMessageReceived(e){var message=e.message;if(!this.isCurrentConversation(message.threadId)){return;}
MessageManager.markMessagesRead([message.id]);this.onMessage(message);this.scrollViewToBottom();if(this.isScrolledManually){this.showNewMessageNotice(message);}},onMessageSending:function conv_onMessageReceived(e){var message=e.message;if(this.isCurrentConversation(message.threadId)){this.onMessage(message);this.forceScrollViewToBottom();}else{if(this.shouldChangePanelNextEvent){Navigation.toPanel('thread',{id:message.threadId});this.shouldChangePanelNextEvent=false;}}},onNewMessageNoticeClick:function conv_onNewMessageNoticeClick(event){event.preventDefault();this.hideNewMessageNotice();this.forceScrollViewToBottom();},onRecipientSuggestionClick:function(event){event.stopPropagation();event.preventDefault();this.recipients.add(event.target.dataset).focus();},onMessageTypeChange:function conv_onMessageTypeChange(){var message='converted-to-'+Compose.type;var messageContainer=this.convertNotice.querySelector('p');messageContainer.setAttribute('data-l10n-id',message);this.convertNotice.classList.remove('hide');if(this._convertNoticeTimeout){clearTimeout(this._convertNoticeTimeout);}
this._convertNoticeTimeout=setTimeout(this.clearConvertNoticeBanners.bind(this),this.CONVERTED_MESSAGE_DURATION);},clearConvertNoticeBanners:function conv_clearConvertNoticeBanner(){this.convertNotice.classList.add('hide');},enableConvertNoticeBanners:function conv_enableConvertNoticeBanner(){Compose.on('type',this.onMessageTypeChange);},disableConvertNoticeBanners:function conv_disableConvertNoticeBanner(){Compose.off('type',this.onMessageTypeChange);},onSubjectChange:function conv_onSubjectChange(){if(this.draft){this.draft.isEdited=true;}
if(Compose.isSubjectVisible&&Compose.isSubjectMaxLength()){this.showSubjectMaxLengthNotice();}else{this.hideSubjectMaxLengthNotice();}},resizeHandler:function conv_resizeHandler(){this.scrollViewToBottom();Compose.scrollMessageContent();},requestContact:function conv_requestContact(){this.assimilateRecipients();if(typeof MozActivity==='undefined'){console.log('MozActivity unavailable');return;}
Recipients.View.isFocusable=false;var contactProperties=['tel'];if(Settings.supportEmailRecipient){contactProperties.push('email');}
var activity=new MozActivity({name:'pick',data:{type:'webcontacts/select',contactProperties:contactProperties}});activity.onsuccess=(function(){if(!activity.result||!activity.result.select||!activity.result.select.length||!activity.result.select[0].value){console.error('The pick activity result is invalid.');return;}
Recipients.View.isFocusable=true;var data=Utils.basicContact(activity.result.select[0].value,activity.result.contact);data.source='contacts';this.recipients.add(data);}).bind(this);activity.onerror=(function(e){Recipients.View.isFocusable=true;console.log('WebActivities unavailable? : '+e);}).bind(this);},updateComposerHeader:function conv_updateComposerHeader(){var recipientCount=this.recipients.numbers.length;if(recipientCount>0){this.setHeaderContent({id:'recipient',args:{n:recipientCount}});}else{this.setHeaderContent('newMessage');}},isScrolledManually:false,manageScroll:function conv_manageScroll(oEvent){var scrollTop=this.container.scrollTop;var scrollHeight=this.container.scrollHeight;var clientHeight=this.container.clientHeight;this.isScrolledManually=((scrollTop+clientHeight)<scrollHeight);if(!this.isScrolledManually&&this.isNewMessageNoticeShown){this.hideNewMessageNotice();}
var kEdge=30;if(scrollTop<kEdge){this.showChunkOfMessages(this.CHUNK_SIZE);this.container.scrollTop=(this.container.scrollHeight-scrollHeight)+scrollTop;}},scrollViewToBottom:function conv_scrollViewToBottom(){if(!this.isScrolledManually&&this.container.lastElementChild&&Navigation.isCurrentPanel('thread')){this.container.lastElementChild.scrollIntoView(false);}},forceScrollViewToBottom:function conv_forceScrollViewToBottom(){this.isScrolledManually=false;this.scrollViewToBottom();},showNewMessageNotice:function conv_showNewMessageNotice(message){Contacts.findByPhoneNumber(message.sender).then((contacts)=>{var sender=message.sender;if(contacts.length){var details=Utils.getContactDetails(sender,contacts[0]);sender=details.title||sender;var index=sender.indexOf(' ');if(index!==-1){sender=sender.slice(0,index);}}
var notice=this.newMessageNotice;var newMessageContactNode=notice.querySelector('.contact');newMessageContactNode.textContent=sender;this.isNewMessageNoticeShown=true;notice.classList.remove('hide');});},hideNewMessageNotice:function conv_hideNewMessageNotice(){this.isNewMessageNoticeShown=false;this.newMessageNotice.classList.add('hide');},initiateNewMessage:function(parameters){var navigateToComposer=()=>{var draftCreatePromise;var draft;if(parameters.messageId){draftCreatePromise=this.storeDraftFromMessage(parameters.messageId);}else if(parameters.number){draft=new Draft({recipients:[parameters.number],type:Utils.isEmailAddress(parameters.number)?'mms':'sms'});draftCreatePromise=Drafts.add(draft).store().then(()=>draft.id);}else if(parameters.content){draft=new Draft(parameters.content);draftCreatePromise=Drafts.add(draft).store().then(()=>draft.id);}else{throw new TypeError('Unknown parameter');}
return draftCreatePromise.then((draftId)=>Navigation.toPanel('composer',{draftId}));};var threadExistingPromise=parameters&&parameters.number?MessageManager.findThreadFromNumber(parameters.number):Promise.reject();return threadExistingPromise.then((id)=>Navigation.toPanel('thread',{id:id,focus:'composer'}),navigateToComposer);},isKeyboardDisplayed:function conv_isKeyboardDisplayed(){return((window.screen.height-window.innerHeight)>150);},_ensureKeyboardIsHidden:function(){if(this.isKeyboardDisplayed()){return new Promise(function(resolve){var setTimer=window.setTimeout(resolve,400);window.addEventListener('resize',function keyboardHidden(){window.clearTimeout(setTimer);window.removeEventListener('resize',keyboardHidden);resolve();});});}
return Promise.resolve();},onSegmentInfoChange:function conv_onSegmentInfoChange(){var currentSegment=Compose.segmentInfo.segments;var isValidSegment=currentSegment>0;var isSegmentChanged=this.previousSegment!==currentSegment;var isStartingFirstSegment=this.previousSegment===0&&currentSegment===1;if(Compose.type==='sms'&&isValidSegment&&isSegmentChanged&&!isStartingFirstSegment){this.previousSegment=currentSegment;document.l10n.setAttributes(this.smsCounterNotice.querySelector('p'),'sms-counter-notice-label',{number:currentSegment});this.smsCounterNotice.classList.remove('hide');window.setTimeout(function(){this.smsCounterNotice.classList.add('hide');}.bind(this),this.ANOTHER_SMS_TOAST_DURATION);}},checkMessageSize:function conv_checkMessageSize(){if(Compose.isResizing){return false;}
if(Settings.mmsSizeLimitation){if(Compose.size>Settings.mmsSizeLimitation){this.showMaxLengthNotice({l10nId:'multimedia-message-exceeded-max-length',l10nArgs:{mmsSize:(Settings.mmsSizeLimitation/1024).toFixed(0)}});return false;}else if(Compose.size===Settings.mmsSizeLimitation){this.showMaxLengthNotice({l10nId:'messages-max-length-text'});return true;}}
this.hideMaxLengthNotice();return true;},getMessageContainer:function conv_getMessageContainer(messageTimestamp,hidden){var startOfDayTimestamp=Utils.getDayDate(messageTimestamp);var messageDateGroup=document.getElementById('mc_'+startOfDayTimestamp);var header,messageContainer;if(messageDateGroup){header=messageDateGroup.firstElementChild;messageContainer=messageDateGroup.lastElementChild;if(messageTimestamp<header.dataset.time){header.dataset.time=messageTimestamp;}
return messageContainer;}
messageDateGroup=this.tmpl.dateGroup.prepare({id:'mc_'+startOfDayTimestamp,timestamp:startOfDayTimestamp.toString(),headerTimeUpdate:'repeat',headerTime:messageTimestamp.toString(),headerDateOnly:'true'}).toDocumentFragment().firstElementChild;header=messageDateGroup.firstElementChild;messageContainer=messageDateGroup.lastElementChild;if(hidden){header.classList.add('hidden');}else{TimeHeaders.update(header);}
this._insertTimestampedNodeToContainer(messageDateGroup,this.container);return messageContainer;},updateCarrier:function conv_updateCarrier(thread,contacts){var carrierTag=document.getElementById('contact-carrier');var threadMessages=this.threadMessages;var number=thread.participants[0];var phoneDetails;var address;if(thread.participants.length===1&&contacts.length){address=Settings.supportEmailRecipient&&Utils.isEmailAddress(number)?contacts[0].email:contacts[0].tel;phoneDetails=Utils.getPhoneDetails(number,address);if(phoneDetails){carrierTag.innerHTML=SharedComponents.phoneDetails(phoneDetails).toString();threadMessages.classList.add('has-carrier');}else{threadMessages.classList.remove('has-carrier');}}else{threadMessages.classList.remove('has-carrier');}},updateHeaderData:function conv_updateHeaderData(){var thread,number;thread=this.activeThread;if(!thread){return Promise.resolve();}
number=thread.participants[0];this.headerText.dataset.number=number;return Contacts.findByAddress(number).then((contacts)=>{var details=Utils.getContactDetails(number,contacts);var contactName=details.title||number;this.headerText.dataset.isContact=!!details.isContact;this.headerText.dataset.title=contactName;var headerContentTemplate=thread.participants.length>1?this.tmpl.groupHeader:this.tmpl.header;this.setHeaderContent({html:headerContentTemplate.interpolate({name:contactName,participantCount:(thread.participants.length-1).toString()})});this.updateCarrier(thread,contacts);});},setHeaderContent:function conv_setHeaderContent(contentL10n){if(typeof contentL10n==='string'){contentL10n={id:contentL10n};}
if(contentL10n.id){this.headerText.firstElementChild&&(this.headerText.textContent='');document.l10n.setAttributes(this.headerText,contentL10n.id,contentL10n.args);return;}
if(contentL10n.html){this.headerText.removeAttribute('data-l10n-id');this.headerText.innerHTML=contentL10n.html;return;}},clearContainer(){var nodes=this.container.querySelectorAll('.attachment-container[data-thumbnail]');Array.from(nodes).forEach((node)=>window.URL.revokeObjectURL(node.dataset.thumbnail));this.container.textContent='';},initializeRendering:function conv_initializeRendering(){this.clearContainer();this.cleanFields();this.messageIndex=0;this._stopRenderingNextStep=false;},stopRendering:function conv_stopRendering(){this._stopRenderingNextStep=true;},shouldRenderForThreadId(threadId){return!this._stopRenderingNextStep&&this.activeThread&&this.activeThread.id===threadId;},showFirstChunk:function conv_showFirstChunk(){this.showChunkOfMessages(this.FIRST_CHUNK_SIZE);TimeHeaders.updateAll('header[data-time-update]');this.scrollViewToBottom();this.emit('visually-loaded');},createMmsContent:function conv_createMmsContent(dataArray){var container=document.createDocumentFragment();dataArray.forEach(function(messageData){if(messageData.blob){var attachment=new Attachment(messageData.blob,{name:messageData.name});var mediaElement=attachment.render();container.appendChild(mediaElement);attachmentMap.set(mediaElement,attachment);}
if(messageData.text){var textElement=document.createElement('span');var text=Template.escape(messageData.text);text=LinkHelper.searchAndLinkClickableData(text);textElement.innerHTML=text;container.appendChild(textElement);}});return container;},renderMessages:function conv_renderMessages(threadId){var taskQueue=new TaskRunner();var onMessagesRendered=(function messagesRendered(){if(this.messageIndex<this.FIRST_CHUNK_SIZE){taskQueue.push(this.showFirstChunk.bind(this));}}).bind(this);var onRenderMessage=(function renderMessage(message){if(!this.shouldRenderForThreadId(threadId)){taskQueue=null;return false;}
taskQueue.push(()=>{if(this.shouldRenderForThreadId(threadId)){Threads.registerMessage(message);return this.appendMessage(message,true);}
return false;});this.messageIndex++;if(this.messageIndex===this.FIRST_CHUNK_SIZE){taskQueue.push(this.showFirstChunk.bind(this));}
return true;}).bind(this);if(!this.shouldRenderForThreadId(threadId)){return;}
var filter={threadId:threadId};var renderingOptions={each:onRenderMessage,filter:filter,invert:false,end:onMessagesRendered};MessageManager.getMessages(renderingOptions);this.isScrolledManually=false;},_createNotDownloadedHTML:function conv_createNotDownloadedHTML(message,classNames){var messageL10nId='tobedownloaded-attachment';var downloadL10nId='download-attachment';var status=message.deliveryInfo[0].deliveryStatus;var dateTimeOptions={weekday:'long',month:'short',day:'2-digit'};var formatter=new Intl.DateTimeFormat(navigator.languages,dateTimeOptions);var expireFormatted=formatter.format(new Date(+message.expiryDate));var expired=+message.expiryDate<Date.now();if(expired){classNames.push('expired');messageL10nId='expired-attachment';}
if(status==='error'){classNames.push('error');}
if(status==='pending'){downloadL10nId='downloading-attachment';classNames.push('pending');}
return this.tmpl.notDownloaded.interpolate({messageL10nId:messageL10nId,messageL10nArgs:JSON.stringify({date:expireFormatted}),messageL10nDate:message.expiryDate.toString(),messageL10nDateFormat:JSON.stringify(dateTimeOptions),downloadL10nId:downloadL10nId});},shouldShowDeliveryStatus:function conv_shouldShowDeliveryStatus(message){if(message.delivery!=='sent'){return false;}
if(message.type==='mms'){return message.deliveryInfo.every(function(info){return info.deliveryStatus==='success';});}else{return message.deliveryStatus==='success';}},shouldShowReadStatus:function conv_shouldShowReadStatus(message){if(message.delivery!=='sent'||message.type==='sms'||!message.deliveryInfo){return false;}
return message.deliveryInfo.every(function(info){return info.readStatus==='success';});},buildMessageDOM:function conv_buildMessageDOM(message,hidden){var messageDOM=document.createElement('li'),bodyHTML='';var messageStatus=message.delivery,isNotDownloaded=messageStatus==='not-downloaded',isIncoming=messageStatus==='received'||isNotDownloaded;var noAttachment=(message.type==='mms'&&!isNotDownloaded&&(!message.attachments||message.attachments.length===0));var invalidEmptyContent=(noAttachment&&!message.subject);if(this.shouldShowReadStatus(message)){messageStatus='read';}else if(this.shouldShowDeliveryStatus(message)){messageStatus='delivered';}
var classNames=['message',message.type,messageStatus,isIncoming?'incoming':'outgoing'];if(hidden){classNames.push('hidden');}
if(message.type&&message.type==='mms'&&message.subject){classNames.push('has-subject');}
if(message.type&&message.type==='sms'){var escapedBody=Template.escape(message.body||'');bodyHTML=LinkHelper.searchAndLinkClickableData(escapedBody);}
if(isNotDownloaded){bodyHTML=this._createNotDownloadedHTML(message,classNames);}
if(invalidEmptyContent){classNames=classNames.concat(['error','invalid-empty-content']);}else if(noAttachment){classNames.push('no-attachment');}
if(classNames.indexOf('error')>=0){messageStatus='error';}else if(classNames.indexOf('pending')>=0){messageStatus='pending';}
messageDOM.className=classNames.join(' ');messageDOM.id='message-'+message.id;messageDOM.dataset.messageId=message.id;messageDOM.dataset.iccId=message.iccId;var simServiceId=Settings.getServiceIdByIccId(message.iccId);var showSimInformation=Settings.hasSeveralSim()&&simServiceId!==null;var simInformationHTML='';if(showSimInformation){simInformationHTML=this.tmpl.messageSimInformation.interpolate({simNumberL10nArgs:JSON.stringify({id:simServiceId+1})});}
messageDOM.innerHTML=this.tmpl.message.interpolate({id:String(message.id),bodyHTML:bodyHTML,timestamp:String(+message.timestamp),subject:String(message.subject),simInformationHTML:simInformationHTML,messageStatusHTML:this.getMessageStatusMarkup(messageStatus).toString()},{safe:['bodyHTML','simInformationHTML','messageStatusHTML']});TimeHeaders.update(messageDOM.querySelector('time'));var pElement=messageDOM.querySelector('p');if(invalidEmptyContent){pElement.setAttribute('data-l10n-id','no-attachment-text');}
var lateArrivalInfos=this.computeLateArrivalInfos(message,messageStatus);if(lateArrivalInfos){var lateArrivalNoticeDOM=this.tmpl.lateArrivalNotice.prepare().toDocumentFragment();document.l10n.setAttributes(lateArrivalNoticeDOM.querySelector('.late-arrival-notice'),lateArrivalInfos.l10nId,lateArrivalInfos.l10nArgs);messageDOM.querySelector('.message-details').appendChild(lateArrivalNoticeDOM);}
var result;if(message.type==='mms'&&!isNotDownloaded&&!noAttachment){this.buildingMessages[message.id]=messageDOM;result=SMIL.parse(message).then((slideArray)=>this.createMmsContent(slideArray)).then((mmsContent)=>{pElement.appendChild(mmsContent);delete this.buildingMessages[message.id];}).then(()=>messageDOM);}else{result=Promise.resolve(messageDOM);}
return result;},getMessageStatusMarkup:function(status){return['read','delivered','sending','error'].indexOf(status)>=0?this.tmpl.messageStatus.prepare({statusL10nId:'message-delivery-status-'+status}):'';},computeLateArrivalInfos:function(message,messageStatus){var limits=this.LATE_NOTICE_LOWER_LIMITS;var sent=message.sentTimestamp;var received=message.timestamp;var lateness=received-sent;var doNotDisplayNotice=!sent||!received||messageStatus==='error'||lateness<limits.NO_NOTICE;if(doNotDisplayNotice){return null;}
var unit=MONTH;var noticeL10nIds={[MONTH]:'late-arrival-notice-in-months',[DAY]:'late-arrival-notice-in-days',[HOUR]:'late-arrival-notice-in-hours',[MINUTE]:'late-arrival-notice-in-minutes'};if(lateness<limits.IN_HOURS){unit=MINUTE;}
else if(lateness<limits.IN_DAYS){unit=HOUR;}
else if(lateness<limits.IN_MONTHS){unit=DAY;}
lateness=Math.floor(lateness/unit);return{l10nId:noticeL10nIds[unit],l10nArgs:{lateness}};},appendMessage:function conv_appendMessage(message,hidden){var timestamp=+message.timestamp;var messageDOM=document.getElementById('message-'+message.id);if(messageDOM){this.removeMessageDOM(messageDOM);}
return this.buildMessageDOM(message,hidden).then((messageDOM)=>{if(!this.shouldRenderForThreadId(message.threadId)){return;}
messageDOM.dataset.timestamp=timestamp;var messageContainer=this.getMessageContainer(timestamp,hidden);this._insertTimestampedNodeToContainer(messageDOM,messageContainer);if(this.inEditMode){this.updateSelectionStatus();}
if(!hidden){this.scrollViewToBottom();}});},_insertTimestampedNodeToContainer:function(nodeToInsert,container){var currentNode=container.firstElementChild,nodeTimestamp=nodeToInsert.dataset.timestamp;while(currentNode&&nodeTimestamp>+currentNode.dataset.timestamp){currentNode=currentNode.nextElementSibling;}
container.insertBefore(nodeToInsert,currentNode||null);},showChunkOfMessages:function conv_showChunkOfMessages(number){var elements=this.container.getElementsByClassName('hidden');Array.slice(elements,-number).forEach((element)=>{element.classList.remove('hidden');if(element.tagName==='HEADER'){TimeHeaders.update(element);}});},showOptions:function conv_showOptions(){var params={header:{l10nId:'message'},items:[]};var subjectItem;if(Compose.isSubjectVisible){subjectItem={l10nId:'remove-subject',method:Compose.hideSubject};}else{subjectItem={l10nId:'add-subject',method:Compose.showSubject};}
params.items.push(subjectItem);if(Navigation.isCurrentPanel('thread')){params.items.push({l10nId:'includeSomeoneElse-label',method:this.includeSomeoneElse.bind(this)});params.items.push({l10nId:'selectMessages-label',method:this.startEdit.bind(this)});}
params.items.push({l10nId:'cancel',incomplete:true});new OptionMenu(params).show();},includeSomeoneElse:function(){var content={recipients:this.activeThread.participants,content:Compose.getContent(),subject:Compose.getSubject(),type:Compose.getType()};this.initiateNewMessage({content});Compose.clear();},startEdit:function conv_edit(){function editModeSetup(){this.inEditMode=true;this.selectionHandler.cleanForm();this.mainWrapper.classList.toggle('edit');}
this.editHeader.removeAttribute('no-font-fit');if(!this.selectionHandler){LazyLoader.load(['/views/shared/js/selection_handler.js','/shared/style/edit_mode.css','/shared/style/switches.css','/shared/style/tabs.css','/views/shared/style/edit-mode.css','/views/conversation/style/edit-mode.css'],()=>{this.selectionHandler=new SelectionHandler({container:this.container,checkUncheckAllButton:this.checkUncheckAllButton,updateSelectionStatus:this.updateSelectionStatus.bind(this),getIdIterator:this.getIdIterator.bind(this),isInEditMode:this.isInEditMode.bind(this)});this.editForm.classList.remove('hide');editModeSetup.call(this);});}else{editModeSetup.call(this);}},isInEditMode:function conv_isInEditMode(){return this.inEditMode;},deleteMessages:function conv_deleteMessages(messageIdList){return MessageManager.deleteMessages(messageIdList).then(()=>{messageIdList.forEach((messageId)=>{Threads.unregisterMessage(messageId);this.removeMessageDOM(document.getElementById('message-'+messageId));});if(!this.activeThread.messages.size){return this.backOrClose();}
var lastDateGroup=this.container.lastElementChild;var lastMessageNode=lastDateGroup.querySelector('li:last-child');return MessageManager.getMessage(+lastMessageNode.dataset.messageId).then((lastMessage)=>InboxView.updateThread(lastMessage,{deleted:true}));}).catch((e)=>console.error('Error when updating the list of threads',e));},delete:function conv_delete(){return Utils.confirm({id:'deleteMessages-confirmation-message',args:{n:this.selectionHandler.selectedCount}},null,{text:'delete',className:'danger'}).then(()=>{WaitingScreen.show();var messageIdsToDelete=this.selectionHandler.selectedList.map((item)=>+item);return this.deleteMessages(messageIdsToDelete);}).then(()=>{ConversationView.cancelEdit();WaitingScreen.hide();});},cancelEdit:function conv_cancelEdit(){if(this.inEditMode){this.inEditMode=false;this.mainWrapper.classList.remove('edit');}},updateSelectionStatus:function conv_updateSelectionStatus(){var selected=this.selectionHandler.selectedCount;if(this.selectionHandler.allSelected()){this.checkUncheckAllButton.setAttribute('data-l10n-id','deselect-all');}else{this.checkUncheckAllButton.setAttribute('data-l10n-id','select-all');}
if(selected>0){this.deleteButton.disabled=false;document.l10n.setAttributes(this.editMode,'selected-messages',{n:selected});}else{this.deleteButton.disabled=true;document.l10n.setAttributes(this.editMode,'deleteMessages-title');}},handleMessageClick:function conv_handleMessageClick(evt){var currentNode=evt.target;var elems={};while(currentNode&&currentNode.classList){if(currentNode.classList.contains('bubble')){elems.bubble=currentNode;}else if(currentNode.classList.contains('message')){elems.message=currentNode;}else if(currentNode.classList.contains('message-status')){elems.messageStatus=currentNode;}
currentNode=currentNode.parentNode;}
if(!(elems.message&&elems.bubble)){return;}
if(elems.message.classList.contains('not-downloaded')){if(elems.message.classList.contains('expired')||elems.message.classList.contains('pending')){return;}
this.retrieveMMS(elems.message);return;}
if(elems.message.classList.contains('invalid-empty-content')){return;}
if(elems.message.classList.contains('error')&&elems.messageStatus){Utils.confirm('resend-confirmation').then(()=>{this.resendMessage(elems.message.dataset.messageId);});}},getMessageBubble:function conv_getMessageContainer(element){var node=element;var bubble;do{if(!node.classList){continue;}
if(node.classList.contains('bubble')){bubble=node;}
if(bubble){if(node.dataset&&node.dataset.messageId){return{id:+node.dataset.messageId,node:bubble};}}
if(node.classList.contains('panel-ConversationView')){return null;}}while((node=node.parentNode));return null;},handleEvent:function conv_handleEvent(evt){switch(evt.type){case'click':if(this.inEditMode){return;}
if(!conv_mmsAttachmentClick(evt.target)){this.handleMessageClick(evt);LinkActionHandler.onClick(evt);}
return;case'contextmenu':evt.preventDefault();evt.stopPropagation();var messageBubble=this.getMessageBubble(evt.target);if(!messageBubble){return;}
var lineClassList=messageBubble.node.parentNode.classList;var messageId=messageBubble.id;var params={type:'action',header:{l10nId:'message-options'},items:[]};if(!lineClassList.contains('not-downloaded')){params.items.push({l10nId:'forward',method:()=>{this.initiateNewMessage({messageId});}});}
params.items.push({l10nId:'select-text',method:(node)=>{this.enableBubbleSelection(node.querySelector('.message-content-body'));},params:[messageBubble.node]},{l10nId:'view-message-report',method:(messageId)=>{Navigation.toPanel('report-view',{id:messageId,threadId:this.activeThread.id});},params:[messageId]},{l10nId:'delete',method:(messageId)=>{Utils.confirm('deleteMessage-confirmation',null,{text:'delete',className:'danger'}).then(()=>this.deleteMessages([messageId]));},params:[messageId]});if(lineClassList.contains('error')&&lineClassList.contains('outgoing')){params.items.push({l10nId:'resend-message',method:this.resendMessage.bind(this,messageId),params:[messageId]});}
params.items.push({l10nId:'cancel'});var options=new OptionMenu(params);options.show();break;case'submit':evt.preventDefault();break;}},cleanFields:function conv_cleanFields(){this.previousSegment=0;if(this.recipients){this.recipients.length=0;}
Compose.clear();},onSendClick:function conv_onSendClick(){if(Compose.isEmpty()){return;}
this.assimilateRecipients();this.container.classList.remove('hide');},simSelectedCallback:function conv_simSelected(phoneNumber,cardIndex){if(Compose.isEmpty()){return;}
cardIndex=+cardIndex;if(isNaN(cardIndex)){cardIndex=0;}
this.sendMessage({serviceId:cardIndex});},sendMessage:function conv_sendMessage(opts){var content=Compose.getContent(),subject=Compose.getSubject(),messageType=Compose.type,serviceId=opts.serviceId===undefined?null:opts.serviceId,recipients;var inComposer=Navigation.isCurrentPanel('composer');if(inComposer){if(!this.recipients.length){console.error('The user tried to send the message but no recipients '+'are entered. This should not happen because we should disable '+'the send button in that case');return;}
recipients=this.recipients.numbers;}else{recipients=this.activeThread.participants;}
this.disableConvertNoticeBanners();this.cleanFields();this.enableConvertNoticeBanners();this.updateDraft();this.updateHeaderData();this.shouldChangePanelNextEvent=inComposer;if(messageType==='sms'){MessageManager.sendSMS({recipients:recipients,content:content[0],serviceId:serviceId,oncomplete:function onComplete(requestResult){if(!requestResult.hasError){this.onMessageSendRequestCompleted();return;}
var errors={};requestResult.return.forEach(function(result){if(result.success){return;}
if(errors[result.code.name]===undefined){errors[result.code.name]=[result.recipient];}else{errors[result.code.name].push(result.recipient);}});for(var key in errors){this.showMessageSendingError(key,{recipients:errors[key]});}}.bind(this)});if(recipients.length>1){this.shouldChangePanelNextEvent=false;Navigation.toPanel('thread-list');if(ActivityClient.hasPendingRequest()){setTimeout(this.backOrClose.bind(this),this.LEAVE_ACTIVITY_DELAY);}
return;}}else{var smilSlides=content.reduce(conv_generateSmilSlides,[]);var mmsOpts={recipients:recipients,subject:subject,content:smilSlides,serviceId:serviceId,onsuccess:function(){this.onMessageSendRequestCompleted();}.bind(this),onerror:function onError(error){var errorName=error.name;this.showMessageSendingError(errorName);}.bind(this)};MessageManager.sendMMS(mmsOpts);}
Compose.focus();},onMessageSent:function conv_onMessageSent(e){this.setMessageStatus(e.message.id,'sent');},onMessageSendRequestCompleted:function conv_onMessageSendRequestCompleted(){if(this.sentAudioEnabled){this.sentAudio.play();}},onMessageFailed:function conv_onMessageFailed(e){var message=e.message;this.setMessageStatus(message.id,'error');if(this.showErrorInFailedEvent==='NonActiveSimCardError'){this.showErrorInFailedEvent='';this.showMessageError('NonActiveSimCardToSendError',{confirmHandler:function(){this.setMessageStatus(message.id,'sending');MozMobileConnectionsClient.switchMmsSimHandler(message.iccId).then(this.resendMessage.bind(this,message.id)).catch(function(err){err&&console.error('Unexpected error while resending the MMS message',err);});}.bind(this)});}},onDeliverySuccess:function conv_onDeliverySuccess(e){var message=e.message;if(!this.shouldShowDeliveryStatus(message)){return;}
this.setMessageStatus(message.id,'delivered');},onReadSuccess:function conv_onReadSuccess(e){var message=e.message;if(!this.shouldShowReadStatus(message)){return;}
this.setMessageStatus(message.id,'read');},showMessageSendingError:function conv_showMsgSendingError(errorName,opts){if(errorName==='NonActiveSimCardError'){this.showErrorInFailedEvent=errorName;return;}
if(errorName==='NotFoundError'){console.info('The message was deleted or is no longer available.');return;}
this.showMessageError(errorName,opts);},showMessageError:function conv_showMessageOnError(errorCode,opts){var dialog=new ErrorDialog(Errors.get(errorCode),opts);dialog.show();},removeMessageDOM:function conv_removeMessageDOM(messageDOM){var messagesContainer=messageDOM.parentNode;messageDOM.remove();if(!messagesContainer.firstElementChild){messagesContainer.parentNode.remove();}},setMessageStatus:function(id,status){var messageDOM=document.getElementById('message-'+id)||this.buildingMessages[id];if(!messageDOM||messageDOM.classList.contains(status)){return;}
var newStatusMarkup=this.getMessageStatusMarkup(status),oldStatusNode=messageDOM.querySelector('.message-status');messageDOM.classList.remove('sending','pending','sent','received','delivered','read','error');messageDOM.classList.add(status);if(oldStatusNode){oldStatusNode.remove();}
if(newStatusMarkup){messageDOM.querySelector('.message-details').appendChild(newStatusMarkup.toDocumentFragment());}},retrieveMMS:function conv_retrieveMMS(messageDOM){var id=+messageDOM.dataset.messageId;var iccId=messageDOM.dataset.iccId;var button=messageDOM.querySelector('button');var setMessageStatus=this.setMessageStatus.bind(this);function setMessageButtonStatus(status){var btnL10n=status==='pending'?'downloading-attachment':'download-attachment';setMessageStatus(id,status);button.setAttribute('data-l10n-id',btnL10n);}
setMessageButtonStatus('pending');MessagingClient.retrieveMMS(id).then(()=>{Threads.unregisterMessage(id);this.removeMessageDOM(messageDOM);},(error)=>{setMessageButtonStatus('error');var errorCode=error&&error.name||null;if(!navigator.mozSettings){console.error('Settings unavailable');return;}
if(errorCode==='RadioDisabledError'){errorCode='RadioDisabledToDownloadError';}
if(errorCode){this.showMessageError(errorCode,{confirmHandler:()=>{setMessageButtonStatus('pending');return MozMobileConnectionsClient.switchMmsSimHandler(iccId).then(this.retrieveMMS.bind(this,messageDOM)).catch((err)=>{setMessageButtonStatus('error');if(err==='NoSimCardError'){this.showMessageError(err);return;}
console.error('Unexpected error while retrieving the MMS message',err||'UnknownError');});}});}});},resendMessage:function conv_resendMessage(id){id=+id;var request=MessageManager.getMessage(id);request.onsuccess=(function(){var message=request.result;var messageDOM=document.getElementById('message-'+id);var resendOpts={message:message,onerror:function onError(error){var errorName=error.name;this.showMessageSendingError(errorName,{recipients:error.data.receivers||[error.data.receiver]});}.bind(this),onsuccess:function(){this.onMessageSendRequestCompleted();}.bind(this)};Threads.unregisterMessage(id);this.removeMessageDOM(messageDOM);MessageManager.resendMessage(resendOpts);}).bind(this);},toFieldKeypress:function(event){if(event.keyCode===13||event.keyCode===event.DOM_VK_ENTER){this.toggleRecipientSuggestions();}},toFieldInput:function(event){var typed;if(event.target.isPlaceholder){typed=event.target.textContent.trim();this.searchContact(typed).then((contacts)=>this.listContacts(typed,contacts));}
Compose.refresh();},exactContact:function conv_exactContact(fValue){return Contacts.findExact(fValue);},searchContact:function conv_searchContact(fValue){if(!fValue){return Promise.resolve([]);}
return Contacts.findByString(fValue);},validateContact:function conv_validateContact(source,fValue,contacts){var isInvalid=true;var index=this.recipients.length-1;var last=this.recipientsList.lastElementChild;var typed=last&&last.textContent.trim();var isContact=false;var record,length,number,contact;if(index<0){index=0;}
var props=['tel'];if(Settings.supportEmailRecipient){props.push('email');}
if(contacts.length){isInvalid=false;record=contacts[0];var values=props.reduce((values,prop)=>{var propValue=record[prop];if(propValue&&propValue.length){return values.concat(propValue);}
return values;},[]);length=values.length;if(source.isLookupable&&!source.isQuestionable&&length===1){if(Utils.probablyMatches(values[0].value,fValue)){isContact=true;number=values[0].value;}}else{for(var i=0;i<length;i++){var propValue=values[i].value;if(this.recipients.numbers.indexOf(propValue)===-1){number=propValue;break;}}
if(typeof number!=='undefined'){isContact=true;}else{isInvalid=true;}}}
if(isContact){this.recipients.remove(index);contact=Utils.basicContact(number,record);contact.source='contacts';this.recipients.add(contact).focus();return;}
if(isInvalid&&contacts.length>1){this.validateContact(source,fValue,contacts.slice(1));return;}
if(!source.isQuestionable&&!length){isInvalid=false;}
source.isInvalid=isInvalid;if(!typed){this.recipients.update(index,source).focus();}},listContacts:function conv_listContacts(fValue,contacts){this.toggleRecipientSuggestions();if(!this.recipients.inputValue){return;}
if(!contacts.length){return;}
var suggestionList=document.createDocumentFragment();var renderer=ContactRenderer.flavor('suggestion');var unknownContactsRenderer=ContactRenderer.flavor('suggestionUnknown');contacts.forEach(function(contact){var rendererArg={contact:contact,input:fValue,target:suggestionList,skip:this.recipients.numbers};if(contact.source!='unknown'){renderer.render(rendererArg);}
else{unknownContactsRenderer.render(rendererArg);}},this);this.toggleRecipientSuggestions(suggestionList);},onHeaderActivation:function conv_onHeaderActivation(){var participants=this.activeThread&&this.activeThread.participants;if(participants&&participants.length>1){Navigation.toPanel('group-view',{id:this.activeThread.id});return;}
var number=this.headerText.dataset.number;var tel,email;if(Settings.supportEmailRecipient&&Utils.isEmailAddress(number)){email=number;}else{tel=number;}
if(this.headerText.dataset.isContact==='true'){this.promptContact({number:number});}else{this.prompt({number:tel,email:email,isContact:false});}},promptContact:function conv_promptContact(opts){opts=opts||{};var number=opts.number||'';var tel,email;if(Settings.supportEmailRecipient&&Utils.isEmailAddress(number)){email=number||'';}else{tel=number||'';}
return Contacts.findByAddress(number).then((contacts)=>{var isContact=contacts.length;var contact=contacts[0];var id;var fragment;if(isContact){id=contact.id;fragment=document.createDocumentFragment();ContactRenderer.flavor('prompt').render({contact:contact,input:number,target:fragment});}
return this.prompt({number:tel,email,header:fragment,contactId:id,isContact,inMessage:opts.inMessage});});},prompt:function conv_prompt(opt){var defer=Utils.Promise.defer();var thread=this.activeThread;var number=opt.number||'';var email=opt.email||'';var isContact=opt.isContact||false;var inMessage=opt.inMessage||false;var header=opt.header;var items=[];var params;if(!header&&(number||email)){header=document.createElement('bdi');header.className='unknown-contact-header';header.textContent=number||email;}
params={classes:['contact-prompt'],complete:defer.resolve,header:header||'',items:null};if(email){items.push({l10nId:'sendEmail',method:function oEmail(param){ActivityPicker.email(param);},params:[email]});if(Settings.supportEmailRecipient){items.push({l10nId:'sendMMSToEmail',method:()=>{this.initiateNewMessage({number:email});},incomplete:true});}}else{if((thread&&thread.participants.length>1)||inMessage){items.push({l10nId:'call',method:function(){ActivityPicker.dial(number);}});items.push({l10nId:'sendMessage',method:()=>{this.initiateNewMessage({number:number});},incomplete:true});}}
params.items=items;if(!isContact){var newContactInfo=number?{tel:number}:{email:email};params.items.push({l10nId:'createNewContact',method:()=>ActivityPicker.createNewContact(newContactInfo)},{l10nId:'addToExistingContact',method:()=>ActivityPicker.addToExistingContact(newContactInfo)});}
if(opt.contactId&&!ActivityClient.hasPendingRequest()){params.items.push({l10nId:'viewContact',method:()=>ActivityPicker.viewContact({id:opt.contactId})});}
if(params.items.length===0){return;}
params.items.push({l10nId:'cancel',incomplete:true});new OptionMenu(params).show();return defer.promise;},updateDraft(){var conversation=this.activeThread;this.assimilateRecipients();var hasDraftToSave=!Compose.isEmpty()||(!conversation&&this.recipients.numbers.length);var isConversationRemoved=conversation&&!conversation.messages.size;var shouldStoreDrafts=false;if(this.draft&&(!hasDraftToSave||isConversationRemoved)){Drafts.delete(this.draft);this.draft=null;shouldStoreDrafts=true;}
if(hasDraftToSave&&(!this.draft||this.draft.isEdited)){this.draft=new Draft({id:this.draft&&this.draft.id,threadId:!isConversationRemoved?conversation&&conversation.id:null,recipients:conversation?conversation.participants:this.recipients.numbers,content:Compose.getContent(),subject:Compose.getSubject(),type:Compose.type});Drafts.add(this.draft);shouldStoreDrafts=true;}
return shouldStoreDrafts?Drafts.store():Promise.resolve();},storeDraftFromMessage(messageId){var message=Threads.Messages.get(messageId);var contentPromise;if(message.type==='sms'){contentPromise=Promise.resolve([message.body]);}else{contentPromise=SMIL.parse(message).then((elements)=>elements.reduce((result,element)=>{if(element.blob){result.push(new Attachment(element.blob,{name:element.name,isDraft:true}));}
if(element.text){result.push(element.text);}
return result;},[]));}
return contentPromise.then((content)=>{var draft=new Draft({subject:message.subject,type:message.type,content});return Drafts.add(draft).store().then(()=>draft.id);});},toggleRecipientSuggestions:function(suggestions){var contactList=this.recipientSuggestions.querySelector('.contact-list');this.recipientSuggestions.classList.toggle('hide',!suggestions);if(!suggestions){contactList.textContent='';}else{contactList.appendChild(suggestions);this.recipientSuggestions.scrollTop=0;}},enableBubbleSelection:function(node){var threadMessagesClass=this.threadMessages.classList;var disable=()=>{this.container.addEventListener('contextmenu',this);node.removeEventListener('blur',disable);threadMessagesClass.add('editable-select-mode');window.getSelection().removeAllRanges();};node.addEventListener('blur',disable);this.container.removeEventListener('contextmenu',this);threadMessagesClass.remove('editable-select-mode');node.focus();window.getSelection().selectAllChildren(node);}};Object.defineProperty(exports,'ConversationView',{get:function(){delete exports.ConversationView;var allowedEvents=['visually-loaded'];return(exports.ConversationView=EventDispatcher.mixin(ConversationView,allowedEvents));},configurable:true,enumerable:true});}(this));