PageSourceSearch

https://gutscheine.cafe-wien.at/templates/qwk/t1/javascript/content-render/product-list-item.js

js cafe-wien.at collected 2026-10-02 07:19:21 UTC 8,977 bytes, 193 lines download raw bytes

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">&minus;</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">&plus;</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.