Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/cvetdv.ru/bitrix/js/vote/component/vote/dist/ |
Upload File : |
this.BX=this.BX||{};this.BX.Vote=this.BX.Vote||{};(function(t,e,s,o,i,n,r,a,l,u,c,d){"use strict";var p=babelHelpers.classPrivateFieldLooseKey("app");var h=babelHelpers.classPrivateFieldLooseKey("getCurrentVote");var v=babelHelpers.classPrivateFieldLooseKey("canCompleteVote");var m=babelHelpers.classPrivateFieldLooseKey("canShowResults");var g=babelHelpers.classPrivateFieldLooseKey("canRevokeVote");var V=babelHelpers.classPrivateFieldLooseKey("getCurrentQuestion");class b extends n.MessageMenu{constructor(){super();Object.defineProperty(this,V,{value:_});Object.defineProperty(this,g,{value:w});Object.defineProperty(this,m,{value:C});Object.defineProperty(this,v,{value:y});Object.defineProperty(this,h,{value:f});Object.defineProperty(this,p,{writable:true,value:void 0});babelHelpers.classPrivateFieldLooseBase(this,p)[p]=u.VoteApplication.getInstance()}getMenuItems(){return[this.getReplyItem(),this.getShowResultsItem(),this.getRevokeItem(),this.getCopyLinkItem(),this.getPinItem(),this.getFavoriteItem(),this.getCompleteItem(),this.getDeleteItem()]}getCopyLinkItem(){const t=super.getCopyLinkItem();const{onclick:e}=t;t.onclick=()=>{e();r.VoteAnalytics.copyLink(this.context.dialogId,this.context.id,"message_link")};return t}getRevokeItem(){if(!babelHelpers.classPrivateFieldLooseBase(this,g)[g]()){return null}return{text:a.Loc.getMessage("VOTE_REVOKE"),onclick:()=>{i.EventEmitter.emit("vote:message-menu:revoke-vote",{entityId:this.context.id});this.close()}}}getCompleteItem(){if(!babelHelpers.classPrivateFieldLooseBase(this,v)[v]()){return null}return{text:a.Loc.getMessage("VOTE_POPUP_BTN_COMPLETE"),onclick:()=>{i.EventEmitter.emit("vote:message-menu:complete-vote",{entityId:this.context.id});this.close()}}}getShowResultsItem(){if(!babelHelpers.classPrivateFieldLooseBase(this,m)[m]()){return null}return{text:a.Loc.getMessage("VOTE_SHOW_RESULTS"),onclick:()=>{i.EventEmitter.emit("vote:message-menu:results-vote",{entityId:this.context.id});this.close()}}}}function f(){const t=babelHelpers.classPrivateFieldLooseBase(this,p)[p].getStore().getters["vote/getVoteCollection"];return t[this.context.componentParams.id]}function y(){const t=babelHelpers.classPrivateFieldLooseBase(this,h)[h]();if(!t){return false}return!t.isCompleted&&t.canEdit}function C(){const t=babelHelpers.classPrivateFieldLooseBase(this,h)[h]();const e=babelHelpers.classPrivateFieldLooseBase(this,V)[V]();if(!t||!e){return false}return t.canEdit&&babelHelpers.classPrivateFieldLooseBase(this,V)[V]().totalCounter>0}function w(){const t=babelHelpers.classPrivateFieldLooseBase(this,h)[h]();if(!t){return false}return!t.isCompleted&&t.canRevoke&&t.isVoted}function _(){var t,e;const s=(t=this.context.componentParams.data)==null?void 0:t.questions;if(!s){return null}const[o]=Object.keys(s);const i=babelHelpers.classPrivateFieldLooseBase(this,p)[p].getStore().getters["vote/getQuestionCollection"];return(e=i[o])!=null?e:null}const E=t=>a.Loc.getMessage(t);const I=(t,e)=>a.Loc.getMessagePlural(t,e,{"#COUNT#":e});const O={name:"VoteQuestion",directives:{hint:l.hint},props:{contextId:{type:String,required:true},isLoading:{type:Boolean,default:false},question:{type:Object,required:true},answers:{type:Object,required:true},isUserVoted:{type:Boolean,default:false},isCompleted:{type:Boolean,default:false}},emits:["answersSelected"],data(){return{selectedRadioBtn:null,selectedCheckboxes:[]}},computed:{answersCollection(){return this.app.getStore().getters["vote/getAnswerCollection"]},formattedAnswers(){const t={};Object.keys(this.answers).forEach(((e,s)=>{const o=this.answers[e];const i=this.answersCollection[o.id]||{};t[e]={...o,counter:i.counter||0,percent:this.question.isMultiple?Math.round(i.percent):this.roundPercentages[s]}}));return t},getCurrentUserVotes(){return this.app.getStore().getters["vote/getCurrentUserVotes"][this.question.id]||[]},canShowResults(){return this.isUserVoted||this.isCompleted},answerVotes(){return Object.values(this.answers).map((t=>{var e;const s=(e=this.answersCollection[t.id])==null?void 0:e.counter;return s||0}))},roundPercentages(){const t=this.answerVotes.reduce(((t,e)=>t+e),0);if(t===0){return this.answerVotes.map((()=>0))}const e=this.answerVotes.map((e=>e/t*100));const s=e.map((t=>Math.floor(t)));const o=100-s.reduce(((t,e)=>t+e),0);const i=e.map(((t,e)=>({index:e,fraction:t%1}))).sort(((t,e)=>e.fraction-t.fraction));for(let t=0;t<o;t++){s[i[t].index]+=1}return s}},watch:{isLoading(t){if(t){this.selectedCheckboxes=this.getCurrentUserVotes||[];this.selectedRadioBtn=this.getCurrentUserVotes[0]}},isUserVoted(t){if(t){return}this.selectedCheckboxes=[];this.selectedRadioBtn=null}},created(){this.app=u.VoteApplication.init()},methods:{radioChanged(){this.emitAnswersSelectedWithValue([this.selectedRadioBtn])},checkboxChanged(){this.emitAnswersSelectedWithValue(this.selectedCheckboxes)},emitAnswersSelectedWithValue(t){const e={questionId:this.question.id,answerIds:t};this.$emit("answersSelected",e)},hasCurrentUserVote(t){if(this.canShowResults){return this.app.getStore().getters["vote/hasCurrentUserVote"](this.question.id,t)}return this.selectedCheckboxes.includes(t)},getUniqueAnswerId(t){return`vote-answer-${t}-${this.contextId}`},showHintCounter(t){return{text:this.countText(t),popupOptions:{position:"bottom",targetContainer:document.body,offsetLeft:25,offsetTop:5,autoHide:false,angle:{position:"top"}}}},countText(t){return I("VOTE_RESULT_COUNT",t)}},template:`\n\t\t<div class="vote__question">\n\t\t\t<div class="vote__question-text">{{ question.question }}</div>\n\t\t</div>\n\t\t<div :class="['vote__answers', { '--voted': canShowResults }]">\n\t\t\t<div v-for="(answer, answerKey) in formattedAnswers" \n\t\t\t\t :key="answerKey"\n\t\t\t\t :class="['vote__answer', { '--selected': hasCurrentUserVote(answer.id) }]"\n\t\t\t>\n\t\t\t\t<input\n\t\t\t\t\tclass="vote__answer-select"\n\t\t\t\t\tv-if="!isLoading && !question.isMultiple"\n\t\t\t\t\ttype="radio"\n\t\t\t\t\tv-model="selectedRadioBtn"\n\t\t\t\t\t:value="answer.id"\n\t\t\t\t\t:id="getUniqueAnswerId(answer.id)"\n\t\t\t\t\t@change="radioChanged"\n\t\t\t\t/>\n\t\t\t\t<input\n\t\t\t\t\tclass="vote__answer-select --checkbox"\n\t\t\t\t\tv-if="!isLoading && question.isMultiple"\n\t\t\t\t\ttype="checkbox"\n\t\t\t\t\tv-model="selectedCheckboxes"\n\t\t\t\t\t:value="answer.id"\n\t\t\t\t\t:id="getUniqueAnswerId(answer.id)"\n\t\t\t\t\t:key="answer.id"\n\t\t\t\t\t@change="checkboxChanged"\n\t\t\t\t/>\n\t\t\t\t<div class="vote__progress-bar">\n\t\t\t\t\t<label class='vote__answer-text' :for="getUniqueAnswerId(answer.id)">{{ answer.message }}</label>\n\t\t\t\t\t<transition name="vote__answer-percent-show">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if="canShowResults"\n\t\t\t\t\t\t\tv-hint="answer.counter > 0 ? (() => showHintCounter(answer.counter)) : null"\n\t\t\t\t\t\t\tclass="vote__answer-percent"\n\t\t\t\t\t\t\t:key="'percent-' + answerKey + '-' + answer.counter">\n\t\t\t\t\t\t\t<span>{{ answer.percent }}</span>\n\t\t\t\t\t\t\t%\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</transition>\n\t\t\t\t\t<transition name="vote__progress-bar-filled">\n\t\t\t\t\t\t<div v-if="canShowResults" class="vote__progress-bar-fill"\n\t\t\t\t\t\t\t :key="'fill-' + answerKey"\n\t\t\t\t\t\t\t :style="{ '--target-width': answer.percent + '%' }"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t</transition>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t`};const P=Object.freeze({vote:"vote",disable:"disable",showResults:"show"});const S={name:"ButtonArea",components:{VoteQuestion:O},props:{question:{type:Object,required:true},isLoading:{type:Boolean,required:true},isUserVoted:{type:Boolean,default:false},isCompleted:{type:Boolean,default:false},isBtnActive:{type:Boolean,default:false}},emits:["onClickVoteButton","showResults"],computed:{isMultipleQuestion(){if(this.isLoading){return false}return this.app.getStore().getters["vote/getQuestionCollection"][this.question.id].isMultiple},buttonType(){if((this.isUserVoted||this.isCompleted)&&this.question.totalCounter>0){return P.showResults}if(this.isMultipleQuestion&&!this.isCompleted){return P.vote}return P.disable},isBtnAvailableToVote(){return this.isBtnActive&&this.buttonType===P.vote},buttonClass(){return`--${this.buttonType}`},summaryText(){if(this.question.totalCounter>0){return I("VOTE_RESULT_COUNT",this.question.totalCounter)}return E("VOTE_SUMMARY_COUNT_NO_VOTES")},buttonText(){if(this.isUserVoted||!this.isMultipleQuestion||this.isCompleted){return this.summaryText}return E("VOTE_BUTTON")}},created(){this.app=u.VoteApplication.init()},methods:{handleButtonClick(){if(this.buttonType===P.vote){this.$emit("onClickVoteButton")}else if(this.buttonType===P.showResults){this.$emit("showResults")}}},template:`\n\t\t<div class="vote-display-btn-wrapper">\n\t\t\t<button class="vote-display-btn"\n\t\t\t\t\t@click="handleButtonClick"\n\t\t\t\t\t:class="[buttonClass, { '--active': isBtnAvailableToVote }]"\n\t\t\t\t\ttype="button"\n\t\t\t>\n\t\t\t\t{{ buttonText }}\n\t\t\t</button>\n\t\t</div>\n\t`};const T={name:"VotePopup",components:{Popup:d.Popup},emits:["confirm","cancel"],computed:{getMessage:()=>E,popupOptions(){return{width:374,className:"vote-display__popup"}}},template:`\n\t\t<Popup\n\t\t\t:options="popupOptions" @close="$emit('cancel')"\n\t\t\tid="vote-display-popup"\n\t\t>\n\t\t\t<div class="vote-display__popup-content">\n\t\t\t\t<div class="vote-display__popup-title">\n\t\t\t\t\t{{ getMessage('VOTE_POPUP_TITLE') }}\n\t\t\t\t</div>\n\t\t\t\t<div class="vote-display__popup-text">\n\t\t\t\t\t{{ getMessage('VOTE_POPUP_TEXT') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class="vote-display__popup-footer">\n\t\t\t\t<button class="vote-display__popup-btn --complete" @click="$emit('confirm')">\n\t\t\t\t\t{{ getMessage('VOTE_POPUP_BTN_COMPLETE') }}\n\t\t\t\t</button>\n\t\t\t\t<button class="vote-display__popup-btn --cancel" @click="$emit('cancel')">\n\t\t\t\t\t{{ getMessage('VOTE_POPUP_BTN_CANCEL') }}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</Popup>\n\t`};const B=2;const L=1;const k={name:"VoteDisplay",components:{VoteQuestion:O,ButtonArea:S,Loader:o.Loader,VotePopup:T},props:{voteItem:{type:Object,required:true},entityId:{type:Number,required:true},entityType:{type:String,required:true},contextId:{type:String,required:true}},emits:["vote","revokeVote","copyLink","completeVote"],data(){return{isShowPopup:false,questionAnswers:{}}},computed:{getMessage:()=>E,firstQuestion(){var t,e;const s=Object.keys((t=this.voteItem.data)==null?void 0:t.questions)[0];return(e=this.voteItem.data)==null?void 0:e.questions[s]},questionCollection(){return this.app.getStore().getters["vote/getQuestionCollection"]},voteCollection(){return this.app.getStore().getters["vote/getVoteCollection"]},currentVote(){return this.voteCollection[this.voteItem.id]},formattedQuestion(){const t=this.questionCollection[this.firstQuestion.id]||{};return{...this.firstQuestion,totalCounter:t.totalCounter,isMultiple:t.isMultiple}},isUserVoted(){if(this.isLoading){return false}return this.currentVote.isVoted},canEdit(){if(this.isLoading){return false}return this.currentVote.canEdit},isAnonymous(){var t;return((t=this.voteItem.data)==null?void 0:t.anonymity)===B},isCompleted(){if(this.isLoading){return false}return this.currentVote.isCompleted},hasSelectedAnswers(){return a.Type.isArrayFilled(this.questionAnswers[this.firstQuestion.id])},voteTypeText(){return this.isAnonymous?E("VOTE_ANONYMOUS"):E("VOTE_PUBLIC")},isLoading(){var t,e;return(t=(e=this.currentVote)==null?void 0:e.isLoading)!=null?t:true},showRevokeNotice(){var t;if(!this.isLoading&&this.currentVote.isCompleted){return false}return((t=this.voteItem.data)==null?void 0:t.options)!==L}},created(){this.app=u.VoteApplication.init();this.voteService=s.ImVoteService.init();n.MessageMenuManager.getInstance().registerMenuByMessageType(e.MessageComponent.voteMessage,b);this.subscribeOnEvents()},mounted(){var t;if(!this.currentVote||((t=this.currentVote)==null?void 0:t.isLoading)!==false){i.EventEmitter.emit("vote-message-batch",{messageId:this.entityId})}},beforeUnmount(){this.unsubscribeFromEvents()},methods:{subscribeOnEvents(){i.EventEmitter.subscribe("vote:message-menu:complete-vote",this.isShowCompletePopup);i.EventEmitter.subscribe("vote:message-menu:revoke-vote",this.recallVote);i.EventEmitter.subscribe("vote:message-menu:results-vote",this.showResults)},unsubscribeFromEvents(){i.EventEmitter.unsubscribe("vote:message-menu:complete-vote",this.isShowCompletePopup);i.EventEmitter.unsubscribe("vote:message-menu:revoke-vote",this.recallVote);i.EventEmitter.unsubscribe("vote:message-menu:results-vote",this.showResults)},async answersSelected(t){this.questionAnswers[t.questionId]=t.answerIds;const e=this.questionCollection[t.questionId];if(e.isMultiple||this.isUserVoted){return}void this.submitVote()},async submitVote(){try{this.app.getStore().dispatch("vote/setUserVoted",{voteId:this.currentVote.id});await this.voteService.sendVote(this.questionAnswers,this.voteItem.id,this.entityId);this.$emit("vote");this.questionAnswers={}}catch(t){console.error("Vote: submit vote error",t);this.app.getStore().dispatch("vote/resetUserVoted",{voteId:this.currentVote.id});BX.UI.Notification.Center.notify({content:E("VOTE_NOTICE_ERROR_MESSAGE_SUBMIT"),autoHideDelay:4e3})}},onClickVoteButton(){if(a.Type.isArrayFilled(this.questionAnswers[this.formattedQuestion.id])){this.submitVote()}},async showResults(t){var e;if(t&&((e=t.data)==null?void 0:e.entityId)!==this.entityId){return}BX.SidePanel.Instance.open(this.currentVote.resultUrl,{cacheable:false,width:480,copyLinkLabel:true,events:{onOpen:({slider:t})=>{const e=t.getCopyLinkLabel();e.setOnclick((()=>{this.$emit("copyLink")}))}}})},async completeVote(){try{this.app.getStore().dispatch("vote/setVoteCompleted",{voteId:this.currentVote.id});await this.voteService.completeVote(this.entityId);this.$emit("completeVote")}catch(t){console.error("Vote: complete vote error",t);this.app.getStore().dispatch("vote/resetVoteCompleted",{voteId:this.currentVote.id});BX.UI.Notification.Center.notify({content:E("VOTE_NOTICE_ERROR_MESSAGE_COMPLETE"),autoHideDelay:4e3})}},isShowCompletePopup(t){var e;if(((e=t.data)==null?void 0:e.entityId)!==this.entityId){return}this.isShowPopup=true},onCompletePopupConfirm(){this.isShowPopup=false;this.completeVote()},onCompletePopupCancel(){this.isShowPopup=false},async recallVote(t){var e;if(((e=t.data)==null?void 0:e.entityId)!==this.entityId){return}const s=this.app.getStore().getters["vote/getCurrentUserVotes"][this.firstQuestion.id];try{this.app.getStore().dispatch("vote/clearVotes",{questionId:this.firstQuestion.id,voteId:this.currentVote.id});this.app.getStore().dispatch("vote/resetUserVoted",{voteId:this.currentVote.id});await this.voteService.revokeVote(this.entityId,this.currentVote.id);this.$emit("revokeVote")}catch(t){console.error("Vote: recall vote error",t);this.app.getStore().dispatch("vote/updateCurrentUserVotes",{questionId:this.firstQuestion.id,answerIds:s});this.app.getStore().dispatch("vote/setUserVoted",{voteId:this.currentVote.id});BX.UI.Notification.Center.notify({content:E("VOTE_NOTICE_ERROR_MESSAGE_REVOKE"),autoHideDelay:4e3})}}},template:`\n\t\t<form class="vote-display">\n\t\t\t<div class="vote-display-inner">\n\t\t\t\t<VoteQuestion\n\t\t\t\t\t:key="formattedQuestion.id"\n\t\t\t\t\t:contextId="contextId"\n\t\t\t\t\t:isLoading="isLoading"\n\t\t\t\t\t:question="formattedQuestion"\n\t\t\t\t\t:isUserVoted="isUserVoted"\n\t\t\t\t\t:isCompleted="isCompleted"\n\t\t\t\t\t:answers="formattedQuestion.answers"\n\t\t\t\t\t@answersSelected="answersSelected"\n\t\t\t\t/>\n\t\t\t\t<div class="vote-display-bottom-container">\n\t\t\t\t\t<div v-if="isLoading" class="vote-display__loader">\n\t\t\t\t\t\t<Loader />\n\t\t\t\t\t</div>\n\t\t\t\t\t<ButtonArea v-else\n\t\t\t\t\t\t:question="formattedQuestion"\n\t\t\t\t\t\t:isLoading="isLoading"\n\t\t\t\t\t\t:isUserVoted="isUserVoted"\n\t\t\t\t\t\t:isCompleted="isCompleted"\n\t\t\t\t\t\t:isBtnActive="hasSelectedAnswers"\n\t\t\t\t\t\t@onClickVoteButton="onClickVoteButton"\n\t\t\t\t\t\t@showResults="showResults"\n\t\t\t\t\t/>\n\t\t\t\t\t<div class="vote__notice">\n\t\t\t\t\t\t<span class="vote__notice-text">{{ voteTypeText }}</span>\n\t\t\t\t\t\t<span v-if="showRevokeNotice" class="vote__notice-text">{{ getMessage('VOTE_NOTICE_REVOKE_IS_NOT_AVAILABLE') }}</span>\n\t\t\t\t\t\t<span v-if="isCompleted" class="vote__notice-text">{{ getMessage('VOTE_NOTICE_COMPLETED') }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</form>\n\t\t<VotePopup\n\t\t\tv-if="isShowPopup"\n\t\t\t@confirm="onCompletePopupConfirm"\n\t\t\t@cancel="onCompletePopupCancel"\n\t\t/>\n\t`};t.VoteDisplay=k})(this.BX.Vote.Component=this.BX.Vote.Component||{},BX.Messenger.v2.Const,BX.Vote.Service,BX.Vote.Component,BX.Event,BX.Messenger.v2.Lib,BX.Vote,BX,BX.Vue3.Directives,BX.Vote,BX.Main,BX.UI.Vue3.Components); //# sourceMappingURL=vote.bundle.map.js