1app.orderItemComponent={components:{orderDish:app.orderDishComponent,orderInfo:app.orderInfoComponent,orderTimer:app.timerComponent,orderAction:app.orderActionComponent,},props:['item','loc'],data(){return{isLoading:!1,}},computed:{dishes(){return this.item.dishes.slice(0,2)},isManyDishes(){return this.item.dishes.length>2},summaryTotal(){return this.item.summary.find(item=>item.type==='total')},totalValue(){return this.summaryTotal.value},totalName(){return this.summaryTotal.name},locCancelBtn(){return this.loc['history/btn-cancel']},locRepeatBtn(){return this.loc['history/btn-repeat']},locReviewBtn(){return this.loc['history/btn-review']},dataNumbers(){return JSON.stringify(this.item.dataQa)},payUrl(){return this.item.info.payUrl},locPayBtn(){return this.loc['profile/order/pay']},isImported(){return this.item.info.source==='imported'},locImportedNote(){return this.loc['history/inside']}},methods:{closeAll(){PubSub.publish('closeProfileOrders');PubSub.publish('closeProfile')},showOrderDetails(orderId){PubSub.publish('showOrderDetails',{orderId})},onConfirmCancelOrder(orderId){app.viewerConfirm(this.loc['profile/order/confirm/question'],this.loc['profile/order/confirm/success'],this.loc['profile/order/confirm/cancel'],()=>{this.cancelOrder(orderId)})},cancelOrder(id){if(this.isLoading){return} 2this.isLoading=!0;let payload={meta:{company:this.company,},cart:{id}} 3app.fetch('/cart/cancel',payload,(res)=>{this.isLoading=!1;if(res.error){app.growl(res.message,'danger');return} 4PubSub.publish('refetchOrders')})},repeatOrder(id){if(this.isLoading){return} 5this.isLoading=!0;let payload={meta:{company:this.company,},repeatCartId:id} 6app.fetch('/cart/recalc3',payload,(res)=>{this.isLoading=!1;if(res.error){app.growl(res.message,'danger');return} 7this.closeAll();app.updateStore({cart:res.cart});PubSub.publish('showCart')})},openReviewForm(){PubSub.publish('showCartReviewForm',{cartId:this.item.info.id,loc:this.loc,})},openPayUrl(){if(this.payUrl){window.location.href=this.payUrl}}},template:` 8 <div class="niOrder" :data-id="item.info.id" :data-numbers="dataNumbers"> 9 10 <div class="niOrder__info"> 11 <orderInfo :info="item.info" 12 :loc="loc"/> 13 </div> 14 15 <div v-if="dishes.length" 16 class="niOrder__dishes" 17 @click="showOrderDetails(item.info.id)"> 18 <orderDish v-for="dish in dishes" 19 :dish="dish" 20 :loc="loc"/> 21 </div> 22 23 <div v-if="isManyDishes" class="niOrder__cut">...</div> 24 25 <div class="niOrder__total"> 26 <div class="niOrder__totalName">{{totalName}}</div> 27 <div class="niOrder__totalValue">{{totalValue}}</div> 28 </div> 29 30 <div v-if="isImported" class="niOrder__importedNote">{{ locImportedNote }}</div> 31 32 <div v-else class="niOrder__actions"> 33 34 <orderAction v-if="item.info.cancelTimer" 35 class="niOrder__action" 36 :isLoading="isLoading" 37 @click="onConfirmCancelOrder(item.info.id)"> 38 {{ locCancelBtn }} 39 <orderTimer v-model="item.info.cancelTimer"></orderTimer> 40 </orderAction> 41 42 <orderAction v-else 43 class="niOrder__action" 44 :isLoading="isLoading" 45 @click="repeatOrder(item.info.id)">{{ locRepeatBtn }}</orderAction> 46 47 <div class="niOrder__detail" 48 @click="showOrderDetails(item.info.id)"> 49 <svg width="2" height="12" viewBox="0 0 2 12" fill="none" xmlns="http://www.w3.org/2000/svg"> 50 <circle cx="1" cy="1" r="1" fill="#292929"/> 51 <rect y="4" width="2" height="8" rx="1" fill="#292929"/> 52 </svg> 53 </div> 54 </div> 55 56 <orderAction v-if="payUrl" 57 class="niOrder__action niOrder__payBtn" 58 @click="openPayUrl">{{ locPayBtn }}</orderAction> 59 60 <orderAction v-if="item.info.showReviewButton" 61 class="niOrder__action niOrder__actionReview" 62 @click="openReviewForm()">{{ locReviewBtn }}</orderAction> 63 64 </div> 65 `};app.ordersMainComponent={components:{orderItem:app.orderItemComponent,spinner:app.commonSpinnerComponent,},props:['loc','isWeb','isApp'],data(){return{loading:!0,loaded:!1,list:[],}}
65,mounted(){PubSub.subscribe('refetchOrders',this.fetch);this.fetch()},destroyed(){PubSub.unsubscribe('refetchOrders')},computed:{isEmpty(){return!this.list.length},locEmpty(){return this.loc['history/empty']}},methods:{fetch(){this.loading=!0;app.fetch('/profile/orders/get',{},(res)=>{if(res.error){this.$emit('error',res.message);return} 66this.list=res.orders||[];this.loading=!1;setTimeout(()=>{this.loaded=!0},30)})}},template:` 67 68 <div class="mcOrders" :class="{'mcOrders--web': isWeb, 'mcOrders--app': isApp}"> 69 70 <spinner v-if="loading"/> 71 72 <div 73 v-else 74 class="mcOrders__content" 75 :class="{'mcOrders__content--loaded': loaded}"> 76 77 <div v-if="isEmpty" class="mcOrders__empty"> 78 {{locEmpty}} 79 </div> 80 81 <div v-else class="mcOrders__list"> 82 <orderItem 83 v-for="item in list" 84 :item="item" 85 :loc="loc"/> 86 </div> 87 88 </div> 89 90 91 92 </div> 93 94 `};app.addModule(()=>{PubSub.subscribe('showProfileOrders',()=>{if(!app.store.state.user){PubSub.publish('showLoginModalWindow',{cb:function(){window.location.assign(window.location.pathname+'?page=orders')}});return} 95app.openViewer({mobile:{withTick:!0,maxHeight:'calc(100dvh - 20px)',},desktop:{maxWidth:'400px',},backgroundColor:'var(--profileViewerBg)',component:{components:{profileHeader:app.profileHeaderComponent,ordersMain:app.ordersMainComponent},computed:{...Vuex.mapState(['loc']),locTitle(){return this.loc['tab/history']}}
95,created(){PubSub.subscribe('closeProfileOrders',this.close)},destroyed(){PubSub.unsubscribe('closeProfileOrders')},methods:{close(){this.$emit('close')},onError(message){app.growl(message,'danger');this.close()},},store:app.store,template:` 96 <div> 97 <profileHeader :title="locTitle"/> 98 <ordersMain 99 :loc="loc" 100 :isWeb="true" 101 @close="close" 102 @error="onError"/> 103 </div> 104`}})});const url=new URL(window.location.href);if(url.searchParams.get('page')==='orders'){PubSub.publish('showProfileOrders');url.searchParams.delete('page');history.replaceState(null,'',url.pathname+url.search)}});app.promoCodesItemComponent={props:['item','loc'],computed:{hasDateEnd(){return!!this.item.dateEnd},locDateEnd(){return(this.loc['profile/promoCodes/validUntil']||'').replace('{date}',this.item.dateEnd)}},template:` 105 <div class="niPromo"> 106 <div class="niPromo__code">{{item.code}}</div> 107 <div v-if="item.name" class="niPromo__name">{{item.name}}</div> 108 <div v-if="hasDateEnd" class="niPromo__date">{{locDateEnd}}</div> 109 </div> 110 `};app.promoCodesMainComponent={components:{promoCodesItem:app.promoCodesItemComponent,spinner:app.commonSpinnerComponent,},props:['loc','isWeb'],data(){return{loading:!0,loaded:!1,list:[],}},mounted(){this.fetch()},computed:{isEmpty(){return!this.list.length},locEmpty(){return this.loc['profile/promoCodes/empty']}},methods:{fetch(){this.loading=!0;app.fetch('/profile/promo-codes/get',{},(res)=>{this.loading=!1;if(res.error){this.$emit('error',res.message);return} 111this.list=res.codes||[];setTimeout(()=>{this.loaded=!0},30)})}},template:` 112 113 <div class="mcPromo" :class="{'mcPromo--web': isWeb}"> 114 115 <spinner v-if="loading"/> 116 117 <div 118 v-else 119 class="mcPromo__content" 120 :class="{'mcPromo__content--loaded': loaded}"> 121 122 <div v-if="isEmpty" class="mcPromo__empty"> 123 {{locEmpty}} 124 </div> 125 126 <div v-else class="mcPromo__list"> 127 <promoCodesItem 128 v-for="item in list" 129 :item="item" 130 :loc="loc"/> 131 </div> 132 133 </div> 134 135 </div> 136 137 `};app.addModule(()=>{PubSub.subscribe('showProfilePromoCodes',()=>{if(!app.store.state.user){PubSub.publish('showLoginModalWindow',{returnTo:'profile'});return} 138app.openViewer({mobile:{withTick:!0,maxHeight:'calc(100dvh - 20px)',},desktop:{maxWidth:'400px',},backgroundColor:'var(--profileViewerBg)',component:{components:{profileHeader:app.profileHeaderComponent,promoCodesMain:app.promoCodesMainComponent},computed:{...Vuex.mapState(['loc']),locTitle(){return this.loc['profile/promoCodes/title']}}
138,created(){PubSub.subscribe('closeProfilePromoCodes',this.close)},destroyed(){PubSub.unsubscribe('closeProfilePromoCodes')},methods:{close(){this.$emit('close')},onError(message){app.growl(message,'danger');this.close()},},store:app.store,template:` 139 <div> 140 <profileHeader :title="locTitle"/> 141 <promoCodesMain 142 :loc="loc" 143 :isWeb="true" 144 @error="onError"/> 145 </div> 146`}})})});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.