1function renderProductListItem(container, object, ticketList = false, eventDate = ''){ 2 3 //missing from regular smarty template: 4 // color variants + associated checks & markup 5 6 let badges = ''; 7 if(object.DISPLAY_BUY_NOW_BUTTON != "1") { 8 if (object.PRODUCTS_IS_NEW) badges += `<div class="inc-product-item-badge new-product">${products_badge_new}</div>`; 9 if (object.PRODUCTS_IS_BESTSELLER) badges += `<div class="inc-product-item-badge bestseller">${products_badge_bestseller}</div>`; 10 if (object.PRODUCTS_HAVE_SPECIAL_PRICE) badges += `<div class="inc-product-item-badge special-offer">${products_badge_special_offer}</div>`; 11 if (object.PRODUCTS_IS_OUT_OF_STOCK) badges += `<div class="inc-product-item-badge out-of-stock">${products_out_of_stock}</div>`; 12 } 13 14 const imageSpecial = object.PRODUCTS_HAVE_SPECIAL_PRICE && object.PRODUCTS_HAVE_SPECIAL_PRICE.expires_date ? ` 15 <div class="inc-product-item-badge-area"> 16 <span class="pli-badge product-sale-countdown"> 17 <span class="countdown-inner" data-datetime="${object.PRODUCTS_HAVE_SPECIAL_PRICE.expires_date}">1T 2h 5m 10s</span> 18 </span> 19 </div>` : ''; 20 21 let imageInner; 22 if(object.PRODUCTS_IMAGES_LIST.used_images.listing != null){ 23 imageInner = ` 24 <img src="${object.PRODUCTS_IMAGES_LIST.used_images.listing.info}" title="${object.PRODUCTS_IMAGE_COPYRIGHT_TEXT}" alt="" aria-hidden="true"> 25 <input type="hidden" aria-hidden="true" class="inc-product-item-image-url-hidden" value="${object.PRODUCTS_IMAGES_LIST.used_images.listing.info}">`; 26 } else { 27 imageInner = ` 28 <img src="${object.PRODUCTS_IMAGES_LIST.default_image.info}" title="${object.PRODUCTS_IMAGE_COPYRIGHT_TEXT}" alt="" aria-hidden="true"> 29 <input type="hidden" aria-hidden="true" class="inc-product-item-image-url-hidden" value="${object.PRODUCTS_IMAGES_LIST.default_image.info}">`; 30 } 31 32 const image = ` 33 <div class="inc-product-item-image"> 34 ${imageSpecial} 35 ${imageInner} 36 </div>`; 37 38 const innerTop = ticketList ? ` 39 <a href="${object.PRODUCTS_LINK}" class="inc-product-item-inner-top"> 40 ${badges} 41 ${image} 42 </a> 43 ` : ` 44 <div class="inc-product-item-inner-top"> 45 ${badges} 46 ${image} 47 </div>`; 48 49 let productsDesc = ''; 50 51 if(object.PRODUCTS_MANUFACTURER) productsDesc += ` 52 <div class="inc-product-item-manufacturer"> 53 ${manufacturer}${object.PRODUCTS_MANUFACTURER} 54 </div>`; 55 56 productsDesc += object.PRODUCTS_NAME ? ` 57 <h3>${object.PRODUCTS_NAME}</h3> 58 <input type="hidden" aria-hidden="true" class="inc-product-item-hidden-name" value="${object.PRODUCTS_NAME}"/> 59 ` : ` 60 <h3>${object.products_name}</h3> 61 <input type="hidden" aria-hidden="true" class="inc-product-item-hidden-name" value="${object.products_name}"/> 62 `; 63 64 if (object.PRODUCTS_SHORT_DESCRIPTION || object.PRODUCTS_DESCRIPTION || object.products_short_description){ 65 let desc; 66 const temp = document.createElement("div"); 67 if(object.PRODUCTS_SHORT_DESCRIPTION) temp.innerHTML = object.PRODUCTS_SHORT_DESCRIPTION; 68 else if(object.products_short_description) temp.innerHTML = object.products_short_description; 69 else if(object.PRODUCTS_DESCRIPTION) temp.innerHTML = object.PRODUCTS_DESCRIPTION; 70 desc = temp.textContent || temp.innerText || ''; 71 productsDesc += ` 72 <div class="inc-product-item-desc-inner"> 73 ${desc} 74 </div>`; 75 } 76 77 if((object.PRODUCTS_PRICE || object.products_price) && showPrices) 78 productsDesc += ` 79 <div class="inc-product-item-price"> 80 ${pli_min_price_label}</br>${object.PRODUCTS_PRICE.substring(0, object.PRODUCTS_PRICE.length - 6)} 81 </div>`; 82 83 if(object.DISPLAY_BUY_NOW_BUTTON != "1"){ 84 if(object.PRODUCTS_STOCK_LEFT > 0 && parseInt(object.PRODUCTS_STOCK_LEFT, 10) <= listingQuantityInfoLimit && !object.PRODUCTS_IS_OUT_OF_STOCK) 85 productsDesc += ` 86 <div class="inc-product-item-stock-left"> 87 ${String.format(products_stock_only_left, object.PRODUCTS_STOCK_LEFT)} 88 </div>`; 89 else if(object.PRODUCTS_IS_OUT_OF_STOCK) 90 productsDesc += ` 91 <div class="inc-product-item-stock-left"> 92 ${products_out_of_stock} 93 </div>`; 94 else if(object.PRODUCTS_STOCK_LEFT > listingQuantityInfoLimit) 95 productsDesc += ` 96 <div class="inc-product-item-stock-left"> 97 ${products_stock_available} 98 </div>`; 99 } 100 101 let productsExtrasInner; 102 if( object.DISPLAY_BUY_NOW_BUTTON == "1" || plDirectbuy || object.display_buy_n
102ow_btn) productsExtrasInner = ` 103 <div class="inc-product-item-buy-wrap"> 104 <form id="direct-buy-${object.PRODUCTS_ID}" class="direct-buy" action="${object.PRODUCTS_LINK_BUY_NOW ? object.PRODUCTS_LINK_BUY_NOW : object.products_link_buy_now}" method="post"> 105 <a class="direct-buy-detail default-button ${object.PRODUCTS_IS_OUT_OF_STOCK ? 'sold-out' : ''}" href="${object.PRODUCTS_LINK}"> 106 ${object.PRODUCTS_IS_OUT_OF_STOCK ? sold_out : button_directbuy_details} 107 </a> 108 <div class="direct-buy-buy"> 109 <div class="inc-quantity-toggle"> 110 <button type="button" class="inc-quantity-button-dec inc-quantity-button">−</button> 111 <input type="number" maxlength="2" size="2" min="1" max="99" name="qty" value="1"/> 112 <button type="button" class="inc-quantity-button-inc inc-quantity-button">+</button> 113 </div> 114 <button class="${style_product_buy_button ? 'inc-product-item-buy-button' : 'call-to-action'} inc-direct-buy-button">${button_in_cart}</button> 115 </div> 116 </form> 117 </div> 118 <span class="inc-added-to-cart"></span>`; 119 else if(show_product_buy_button) { 120 let buyLabel; 121 if(object.PRODUCTS_TYPE == '29') buyLabel = more_info; 122 else if(object.PRODUCTS_IS_OUT_OF_STOCK) buyLabel = sold_out; 123 else if(object.PRODUCTS_TYPE == 10) buyLabel = button_buy_product; 124 else if(object.PRODUCTS_TYPE == 23) buyLabel = button_buy_item; 125 else if(object.PRODUCTS_TYPE == 18) buyLabel = button_buy_ticket; 126 else buyLabel = button_buy_now; 127 productsExtrasInner = ` 128 <a href="${object.PRODUCTS_LINK}" class="inc-product-item-buy-wrap"> 129 <div class="${style_product_buy_button ? 'inc-product-item-buy-button' : 'call-to-action'} ${object.PRODUCTS_IS_OUT_OF_STOCK ? 'sold-out' : ''}"> 130 ${buyLabel} 131 </div> 132 </a>`; 133 134 } 135 136 const productsExtras = (object.PRODUCTS_PRICE || object.products_price) && showPrices || object.DISPLAY_BUY_NOW_BUTTON == "1" || object.display_buy_now_btn || show_product_buy_button || object.VARIANT_PRODUCTS ? ` 137 <div class="inc-product-item-extras"> 138 ${productsExtrasInner} 139 </div>` : ''; 140 141 const productsListRight = ` 142 <div class="inc-product-item-details"> 143 <div class="inc-product-item-desc"> 144 ${productsDesc} 145 </div> 146 ${productsExtras} 147 </div>`; 148 149 const json = JSON.stringify(object) 150 const quickbuyControl = ` 151 <script> 152 object${object.PRODUCTS_ID} = ${json}; 153 </script> 154 <button type="button" class="inc-ticket-quickbuy-button" onclick="fetchProductVariants(openQuickbuy, object${object.PRODUCTS_ID}, true, '${eventDate}')"> 155 <i class="im icon-shopping-cart" aria-hidden="true"></i> 156 <span class="sr-only">${quickbuy_sr_label}</span> 157 </button>`; 158 159 const inner = ` 160 <div class="inc-product-item-inner-container ${object.PRODUCTS_PRICE != '' || object.price_formated != '' ? 'inc-product-item-with-price ' : ''} 161 ${object.PRODUCTS_HAVE_SPECIAL_PRICE || object.special_price ? 'inc-product-item-special-price ' : ''} 162 ${object.PRODUCTS_IS_OUT_OF_STOCK || object.check_stock && object.products_stock <= 0 ? 'inc-product-item-out-of-stock ' : ''}"> 163 ${innerTop} 164 ${productsListRight} 165 ${quickbuyControl} 166 </div>`; 167 168 if(object.PRODUCTS_TYPE != "30"){ 169 if(object.PRODUCTS_LINK && object.DISPLAY_BUY_NOW_BUTTON != "1" && !ticketList){ 170 container.append(` 171 <a href="${object.PRODUCTS_LINK}" id="inc-product-item-${object.PRODUCTS_ID}" class="inc-product-item ${object.PRODUCTS_TYPE == '29' ? 'blog-item' : ''}"> 172 ${inner} 173 </a>`); 174 } else { 175 container.append(` 176 <div id="inc-product-item-${object.PRODUCTS_ID}" class="inc-product-item ${object.PRODUCTS_TYPE == '29' ? 'blog-item' : ''}"> 177 ${inner} 178 </div>`); 179 } 180 } else { 181 if (object.PRODUCTS_MANUFACTURER_URL){ 182 container.append(` 183 <a id="inc-product-item-${object.PRODUCTS_ID}" target="_blank" class="inc-product-item inc-advertisement-item" href="https://${object.PRODUCTS_MANUFACTURER_URL}"> 184 ${inner} 185 </a>`); 186 } else{ 187 container.append(` 188 <div id="inc-product-item-${object.PRODUCTS_ID}" class="inc-product-item inc-advertisement-item"> 189 ${inner} 190 </a>`); 191 } 192 } 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.