custom/static-plugins/PixupWishlistSW6/src/Resources/views/storefront/layout/header/header.html.twig line 1

Open in your IDE?
  1. {% sw_extends '@Storefront/storefront/layout/header/header.html.twig' %}
  2. {% block layout_header_actions_cart %}
  3.     <div class="col-auto">
  4.         <div class="header-cart">
  5.             <a class="btn header-cart-btn header-actions-btn PixupWishlistPageIcon"
  6.                href="{{ path('frontend.pixup.wishlist.overview') }}"
  7.                title="{{  "pixup-wishlist.actions.name"|trans }}">
  8.                 <div class="PixupWishlistProductCount d-none" id="wishlistProductCount">
  9.                     {{ page.header.pixup.wishlistProductCount }}
  10.                 </div>
  11.                 <span class="header-cart-icon">
  12.                     {% sw_icon 'star' style { 'pack' : 'globus_icons', 'class': 'wishlist', 'size': size, 'color': 'transparent' } %}
  13.                 </span>
  14.                 <span class="action-btn-label d-none d-xl-block">
  15.                     {{"pixup-wishlist.actions.name"|trans }}
  16.                 </span>
  17.             </a>
  18.         </div>
  19.     </div>
  20.     {#Content for: add-to-wishlist-button.html.twig #}
  21.     <!-- Modal -->
  22.     <div class="modal fade" id="pixupWishlist_chooseWishlistModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  23.         <div class="modal-dialog" role="document">
  24.             <div class="modal-content">
  25.                 <div class="modal-header">
  26.                     <h5 class="modal-title" style="margin-left:0.3em;"><span>{% sw_icon 'px-heart' style{"pack":"pixup","class":"PixupAddToWishlistRemoveIcon pixupBaseIcon pxOutlineWhite"} %} &thinsp;</span><span id="pixupWishlistSelect_title">{{  "pixup-wishlist.product-detail.modal.add.title"|trans }}</span></h5>
  27.                     <br>
  28.                     <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  29.                         <span aria-hidden="true">&times;</span>
  30.                     </button>
  31.                 </div>
  32.                 <div class="modal-body" style="padding:0">
  33.                     <div class="modal-title PixupCechBoxGroupTitle" id="pixupWishlist_description">{{  "pixup-wishlist.product-detail.modal.add.description"|trans }}</div>
  34.                     <div id="pixupWishlist_chooseWishlistModal_body_select">
  35.                     </div>
  36.                 </div>
  37.                 <div class="modal-footer">
  38.                     <button type="button" class="btn btn-secondary" data-dismiss="modal">{{  "pixup-wishlist.product-detail.modal.close"|trans }}</button>
  39.                     <button id="pixupWishlist_save" type="button" class="btn btn-primary">{{  "pixup-wishlist.product-detail.modal.add.confirm"|trans }}</button>
  40.                 </div>
  41.             </div>
  42.         </div>
  43.     </div>
  44.     <script>
  45.         function substrectOneFromWLHeader(){
  46.             wishlistCount = document.getElementById("wishlistProductCount");
  47.             if (wishlistCount === null){
  48.                 return;
  49.             }
  50.             currentCount = wishlistCount.innerHTML;
  51.             wishlistCount.innerHTML = (parseInt(currentCount,0)-1).toString();
  52.         }
  53.         function addOneFromWLHeader(){
  54.             wishlistCount = document.getElementById("wishlistProductCount");
  55.             if (wishlistCount === null){
  56.                 return;
  57.             }
  58.             currentCount = wishlistCount.innerHTML;
  59.             wishlistCount.innerHTML = (parseInt(currentCount,0)+1).toString();
  60.         }
  61.         function pixupWishlist_changeProductWishlistStateInit(elem,remove,productID,wishlistId=null,applyStyle=true, lineItemData=null){
  62.             if(remove === 'true' || remove === true) {
  63.                 baseUrl = "{{ url('frontend.pixup.wishlist.ajax.remove_product', {'productId': '--product-id--','wishlistId': '--wishListId--'})  }}";
  64.                 baseUrl = baseUrl.replace(/--product-id--/, productID).replace(/--wishListId--/,wishlistId);
  65.                 csrfToken = document.querySelector('#change-remove-product-csrf input').value;
  66.                 pixupWishlist_ajaxCore("POST", baseUrl, csrfToken, pixupWishlist_changeProductWishlistStateHandler,[elem,baseUrl,productID,remove,wishlistId,applyStyle]);
  67.             } else if(remove === 'custom') {
  68.                 baseUrl = "{{ url('frontend.pixup.wishlist.ajax.add_product', {'productId': '--product-id--','wishlistId': '--wishListId--'})  }}";
  69.                 baseUrl = baseUrl.replace(/--product-id--/, productID).replace(/--wishListId--/,wishlistId);
  70.                 csrfToken = document.querySelector('#change-add-product-csrf input').value;
  71.                 if(lineItemData) {
  72.                     pixupWishlist_ajaxCore("POST", baseUrl, csrfToken, pixupWishlist_changeProductWishlistStateHandler,[elem,baseUrl,productID,remove,wishlistId,applyStyle], lineItemData);
  73.                 } else {
  74.                     pixupWishlist_ajaxCore("POST", baseUrl, csrfToken, pixupWishlist_changeProductWishlistStateHandler,[elem,baseUrl,productID,remove,wishlistId,applyStyle]);
  75.                 }
  76.             } else {
  77.                 return false;
  78.             }
  79.         }
  80.         function pixupWishlist_changeProductWishlistStateHandler(xhttp,elem,baseUrl,productID,removeProduct,wishlistId=null,applyStyle=true){
  81.             removeProductMsg = "{{ "pixup-wishlist.product-detail.deleteProduct"|trans }}";
  82.             addProductMsg = "{{ "pixup-wishlist.product-detail.addProduct"|trans }}";
  83.             data = JSON.parse(xhttp.responseText).data;
  84.             if(data.productOnWishlist === false && data.success) { // product removed
  85.                 substrectOneFromWLHeader();
  86.                 if(elem !== null) {
  87.                     elem.title = addProductMsg;
  88.                     elem.children[0].style.display = "inline-block";
  89.                     elem.children[1].style.display = "none";
  90.                     elem.dataset.remove = false;
  91.                 }
  92.             }else if(data.success){ // product added
  93.                 addOneFromWLHeader();
  94.                 if(elem !== null) {
  95.                     elem.title = removeProductMsg;
  96.                     elem.children[0].style.display = "none";
  97.                     elem.children[1].style.display = "inline-block";
  98.                     elem.dataset.remove = true;
  99.                 }
  100.             }else if(!data.success && data.wishListIdRequired){ // cant perform action on product because multiple wishlists exsist
  101.                 //get all wishlists
  102.                 url = "{{ url('frontend.pixup.wishlist.ajax.get_wishlists',{'productId': '--product-id--'})  }}";
  103.                 url = url.replace(/--product-id--/, "");
  104.                 pixupWishlist_ajaxCore("GET", url, '', pixupWishlists_selectWishlist,[elem,productID])
  105.             }
  106.         }
  107.         function pixupWishlists_selectWishlist(xhttp,elem,productID){
  108.             var safeBtn = document.getElementById('pixupWishlist_save');
  109.             var description = document.getElementById('pixupWishlist_description');
  110.             var title = document.getElementById("pixupWishlistSelect_title");
  111.             var select = document.getElementById("pixupWishlist_chooseWishlistModal_body_select");
  112.             var data = JSON.parse(xhttp.responseText).data.wishlists;
  113.             var addDescription = "{{  "pixup-wishlist.product-detail.modal.add.description"|trans }}";
  114.             var addConfirm = "{{  "pixup-wishlist.product-detail.modal.add.confirm"|trans }}";
  115.             var addTitle = "{{  "pixup-wishlist.product-detail.modal.add.title"|trans }}";
  116.             var removeDescription = "{{  "pixup-wishlist.product-detail.modal.remove.description"|trans }}";
  117.             var removeConfirm = "{{  "pixup-wishlist.product-detail.modal.remove.confirm"|trans }}";
  118.             var removeTitle = "{{  "pixup-wishlist.product-detail.modal.remove.title"|trans }}";
  119.             //clear old event Listener ( so only one function can listen on it )
  120.             safeBtnClone = safeBtn.cloneNode(true);
  121.             //set listener
  122.             safeBtnClone.addEventListener("click", function(){
  123.                 //get all selected checkboxes and send the value to the changeState function
  124.                 var all_checkboxes = document.querySelectorAll('input[name="pixupWishlistCheckBoxWishlistSelector[]"]');
  125.                 productOnOneWishlist = false;
  126.                 for(var x = 0, l = all_checkboxes.length; x < l;  x++) {
  127.                     if(all_checkboxes[x].checked === true)
  128.                         productOnOneWishlist = true;
  129.                     if(all_checkboxes[x].dataset.isOnWishlist === "true" && all_checkboxes[x].checked === true && all_checkboxes[x].value !== "-1" ||
  130.                         all_checkboxes[x].dataset.isOnWishlist === "false"  && all_checkboxes[x].checked === false)
  131.                         continue;
  132.                     pixupWishlist_changeProductWishlistStateInit(
  133.                         elem,
  134.                         !all_checkboxes[x].checked,
  135.                         productID,
  136.                         all_checkboxes[x].value,
  137.                         false
  138.                     );
  139.                 }
  140.                 if(productOnOneWishlist === true){
  141.                     elem.title = removeProductMsg;
  142.                     elem.children[0].style.display = "none";
  143.                     elem.children[1].style.display = "inline-block";
  144.                     elem.dataset.remove = true;
  145.                 }else{
  146.                     elem.title = addProductMsg;
  147.                     elem.children[0].style.display = "inline-block";
  148.                     elem.children[1].style.display = "none";
  149.                     elem.dataset.remove = false;
  150.                 }
  151.                 $('#pixupWishlist_chooseWishlistModal').modal('hide')
  152.             });
  153.             safeBtn = safeBtn.parentNode.replaceChild(safeBtnClone, safeBtn);
  154.             //delete options
  155.             select.innerHTML = "";
  156.             //set proper messages
  157.             if(elem.dataset.remove === 'true'){
  158.                 safeBtn.innerHTML = removeConfirm;
  159.                 description.innerHTML = removeDescription;
  160.                 title.innerHTML = removeTitle;
  161.             }else{
  162.                 safeBtn.innerHTML = addConfirm;
  163.                 description.innerHTML = addDescription;
  164.                 title.innerHTML = addTitle;
  165.             }
  166.             //create a checkbox for every recieved wishlist ( subscribed wishlists excluded )
  167.             ownWishlistAdded = false;
  168.             for(i=0;i<data.length;i++){
  169.                 if(data[i].subscribed === true)
  170.                     continue;
  171.                 ownWishlistAdded = true;
  172.                 select.appendChild(createCheckbox(data[i],productID));
  173.             }
  174.             //if no wishlist exsist
  175.             if(ownWishlistAdded === false){
  176.                 customData = {name:"{{ "pixup-wishlist.product-detail.modal.createNewWishlist"|trans }}",id:-1,products:[-1]};
  177.                 select.appendChild(createCheckbox(customData,-1));
  178.             }
  179.             //add checkboxes for subcribed wishlists
  180.             match = 0;
  181.             for(i=0;i<data.length;i++){
  182.                 if(data[i].subscribed === false)
  183.                     continue;
  184.                 if(data[i].editable !== true)
  185.                     continue;
  186.                 match++;
  187.                 if(match === 1) {
  188.                     var hr = document.createElement("hr");
  189.                     var div = document.createElement("div");
  190.                     div.classList = "center PixupCechBoxGroupTitle";
  191.                     div.innerHTML = "{{ "pixup-wishlist.product-detail.modal.subscribedWishlists"|trans }}";
  192.                     select.appendChild(hr);
  193.                     select.appendChild(div);
  194.                 }
  195.                 select.appendChild(createCheckbox(data[i],productID,"PixupCheckBoxRow2"));
  196.             }
  197.             // $('#pixupWishlist_chooseWishlistModal').modal()
  198.         }
  199.         function createCheckbox(data,productId,className = ""){
  200.             var div = document.createElement("div");
  201.             div.className = "custom-control custom-checkbox PixupCheckBoxRow "+className;
  202.             var input = document.createElement("input");
  203.             input.type = "checkbox";
  204.             input.className = "custom-control-input";
  205.             input.id = "pixupWishlist"+i;
  206.             input.name = "pixupWishlistCheckBoxWishlistSelector[]";
  207.             input.value = data.id;
  208.             input.dataset.isOnWishlist = false;
  209.             isOnWishlist = false;
  210.             products = Object.values(data.products);
  211.             for(let x = 0; products.length > x;x++){
  212.                 if(products[x] === productId) {
  213.                     isOnWishlist = true;
  214.                     break;
  215.                 }
  216.             }
  217.             if (isOnWishlist) {
  218.                 input.checked = true;
  219.                 input.dataset.isOnWishlist = true;
  220.             }
  221.             var label = document.createElement("label");
  222.             label.className = "custom-control-label";
  223.             label.htmlFor ="pixupWishlist"+i;
  224.             label.innerHTML = data.name;
  225.             div.appendChild(input);
  226.             div.appendChild(label);
  227.             return div
  228.         }
  229.         function pixupWishlist_ajaxCore(requestType, url, csrfToken, callback,options=null, lineItemData=null){
  230.             var xhttp = new XMLHttpRequest();
  231.             xhttp.onreadystatechange = function() {
  232.                 if (this.readyState == 4 && this.status == 200) {
  233.                     if(options !== null) {
  234.                         callback(this, ...options);
  235.                     }
  236.                 }
  237.             };
  238.             xhttp.open(requestType, url, true);
  239.             if(csrfToken !== ''){
  240.                 var formData = new FormData();
  241.                 formData.append("_csrf_token", csrfToken);
  242.                 //lineitem for cuttingservice
  243.                 if(lineItemData)
  244.                     formData.append("lineItem", lineItemData)
  245.                 xhttp.send(formData);
  246.             } else {
  247.                 xhttp.send();
  248.             }
  249.         }
  250.     </script>
  251.     {#end of content for add-to.wishlist.button.html.twig#}
  252.     {{ parent() }}
  253. {% endblock%}