1var EkvBasket = function(){ 2 var ajaxBaseUrl = $.i18n.prepareLink('/events/item.html'); 3 var cartAlreadySubmit = false; 4 5 var o = { 6 init: init, 7 redrawCart: redrawCart, 8 submitCart: submitCart, 9 checkBasketForAnotherEventExceptSpecifiedOne: checkBasketForAnotherEventExceptSpecifiedOne 10 }; 11 12 function init(){ 13 $(document).on('click', '.basket-details .del-btn', function(){ 14 var data = $(this).data(); 15 16 removeTicket(data.ticketsPacked, data.eventId); 17 }); 18 19 $(document).on('click', '.mainBasket_btnClear', function(){ 20 if (confirm($.i18n._('cart.clear_confirm'))) { 21 location.replace($.i18n.prepareLink('/basket/clean.html')) 22 } 23 }); 24 25 $(document).on('click', '.mainBasket_btnSubmit', function(){ 26 submitCart(); 27 }); 28 } 29 30 function submitCart() { 31 if (!cartAlreadySubmit) { 32 $.ajax({ 33 url: ajaxBaseUrl, 34 dataType: 'json', 35 data: { 36 doAjaxAction: 'analyticsStep3Code', 37 eventId: $('.basket-details').attr('data-id') 38 || $('.button-holder').attr('data-id') 39 || $('#frameBackBtn').attr('data-id') 40 }, 41 success: function(data) { 42 if (data) { 43 sendDataToAnalytics(data); 44 } 45 changeLocation(); 46 }, 47 error: function () { 48 changeLocation(); 49 } 50 }); 51 } 52 cartAlreadySubmit = true; 53 } 54 55 function changeLocation() { 56 location.replace($.i18n.prepareLink('/basket/buy?origin=through')); 57 } 58 59 /** 60 * eventId is required on deleting last ticket from basket (mainFront), 61 * there is no way to define event for mainBuyBtn in that case except passing it manually 62 * @param eventId 63 */ 64 function redrawCart(eventId) { 65 var options = { 66 doAjaxAction: 'composeBasketContents', 67 displayPriceMarkup: 0 68 }; 69 70 if (eventId) { 71 options.eventID = eventId; 72 } 73 74 $.get( 75 ajaxBaseUrl, 76 options, 77 function(data){ 78 callbackOnBasketContents(data) 79 } 80 ); 81 } 82 83 function callbackOnBasketContents(data) { 84 var ticketsAmount = data.basketTotals.ticketAmount; 85 $('#mainBasketPopup').html(data.frontBasket); 86 87 //--- step2 ---// 88 $('#step2BasketHolder').html(data.frontBasket).find('.mainBasket_btns').remove(); 89 90 $('#mainFrontBasket_ticketsAmount').html(ticketsAmount); 91 var mobileNavigationCart = $('.mobile-navigation .cart-circle.count'); 92 var mobileCart = $('.widget-block.cart-widget.mobile-cart #mobFrontBasket_ticketsAmount'); 93 mobileCart.html(ticketsAmount); 94 if (ticketsAmount) { 95 mobileNavigationCart.removeClass('in-active'); 96 mobileCart.removeClass('in-active'); 97 } else { 98 mobileNavigationCart.addClass('in-active'); 99 mobileCart.addClass('in-active'); 100 } 101 resizeFancyboxModal(); 102 103 handleEventMainBuyBtn(ticketsAmount, data); 104 } 105 106 function handleEventMainBuyBtn(ticketsAmount, callbackData) { 107 var btn = $('#mainBuyBtn'); 108 109 if (btn.length != 1) { 110 return false; 111 } 112 113 var mainBuyBtnContents = ''; 114 var dataCanProceed = 0; 115 116 /** 117 * Check if we are currently on the event page of eventId which is currently kept in basket 118 */ 119 if (btn.data('eventId') == callbackData.event.id) { 120 if (ticketsAmount > 0) { 121 mainBuyBtnContents = ' (' + ticketsAmount + ')'; 122 dataCanProceed = 1; 123 } 124 125 btn.find('span').html(mainBuyBtnContents); 126 btn.data('canProceed', dataCanProceed); 127 } else { 128 /** 129 * This one is needed while unclicking manually tickets from sector, keeps it sync 130 */ 131 btn.find('span').html(mainBuyBtnContents); 132 btn.data('canProceed', dataCanProceed); 133 } 134 } 135 136 function removeTicket(ticketIdsPacked, eventID) { 137 $.get( 138 ajaxBaseUrl, 139 { 140 doAjaxAction: 'deleteRowCellsFromOrder', 141 idCell2PricePacked: ticketIdsPacked, 142 eventID: eventID 143 }, 144 function (data) { 145 sendDataToAnalytics(data); 146 redrawCart(eventID); 147 } 148 ); 149 } 150 151 function checkBasketForAnotherEventExceptSpecifiedOne(eventID, callBack, callerElement) { 152 $.getJSON( 153 ajaxBaseUrl, 154 { 155 doAjaxAction: 'checkBasketForAnotherEventExceptSpecifiedOne', 156 eventID: eventID 157 }, 158 function (data) { 159 if (data.requiresAuth) { 160 if (confirm($.i18n._('event.auth_requires'))) { 161 if (window.frameElement) { 162 parent.location.href = data.authUrl; 163 } else { 164 location.href = data.authUrl; 165 } 166 } 167 return false;
168 } 169 var requirePromt = true; 170 if (!data.hasError && !data.hasBasketAnyEventsButSpecifiedOne) { 171 requirePromt = false; 172 } 173 174 if ( 175 !requirePromt 176 || (requirePromt && confirm($.i18n._('cart.clear_other_event_confirm'))) 177 ) { 178 sendDataToAnalytics(data); 179 callBack(callerElement); 180 } 181 } 182 ); 183 } 184 185 function sendDataToAnalytics(data) { 186 var handler = window.AnalyticsHandler || (parent && parent.AnalyticsHandler); 187 if (handler) { 188 handler.handleAjax(data); 189 } 190 } 191 192 return o; 193};
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.