(function () {
'use strict';
var moved = false;
var observer = null;
var retryTimer = null;
var RELATED_TEXTS = [
'productos relacionados',
'related products'
];
/**
* Check whether an element is one of our widgets
*/
function isOurWidget(el) {
if (!el) return false;
return (
el.matches('.Qe_Recently-view') ||
el.matches('.Qe_best_seller')
);
}
/**
* Find Pagination container
*/
function findPagination() {
var selectors = [
'ul.pagination',
'nav.pagination',
'.pagination',
'.paginate',
'.pagination-custom',
'#pagination',
'[data-pagination]'
];
for (var i = 0; i < selectors.length; i++) {
var els = document.querySelectorAll(selectors[i]);
for (var j = 0; j < els.length; j++) {
var el = els[j];
// Skip if it is our widget or inside our widget
if (isOurWidget(el) || el.closest('.Qe_Recently-view, .Qe_best_seller')) {
continue;
}
// If it's wrapped in a specific pagination wrapper, return the wrapper
var parent = el.parentElement;
if (
parent &&
parent.tagName !== 'MAIN' &&
parent.tagName !== 'BODY' &&
(parent.classList.contains('pagination-wrapper') || parent.classList.contains('pagination-container'))
) {
return parent;
}
return el;
}
}
return null;
}
/**
* Find Related Products heading
*/
function findRelatedHeading() {
if (!document.body) return null;
var walker = document.createTreeWalker(
document.body,
NodeFilter.SHOW_TEXT,
null,
false
);
var node;
while ((node = walker.nextNode())) {
var text = (node.nodeValue || '').trim().toLowerCase();
if (!text) continue;
for (var i = 0; i < RELATED_TEXTS.length; i++) {
if (text.indexOf(RELATED_TEXTS[i]) !== -1) {
return node;
}
}
}
return null;
}
/**
* Find the complete Related Products section.
*/
function findRelatedContainer(textNode) {
if (!textNode) return null;
var current = textNode.parentElement;
while (
current &&
current !== document.body &&
current.tagName !== 'MAIN'
) {
if (isOurWidget(current)) {
current = current.parentElement;
continue;
}
var images = current.querySelectorAll('img').length;
var height = current.offsetHeight;
if (images >= 1 && height >= 150) {
return current;
}
current = current.parentElement;
}
return textNode.parentElement;
}
/**
* Find footer
*/
function findFooter() {
return (
document.querySelector('footer') ||
document.querySelector('.site-footer') ||
document.querySelector('[id*="footer"]') ||
document.querySelector('[class*="footer"]')
);
}
/**
* Check whether Recently Viewed is already
* in the correct position relative to target container.
*/
function alreadyCorrectlyPlaced(
targetContainer,
recentlyViewed,
bestSeller,
placementAction
) {
if (!targetContainer) return false;
var isCorrect = false;
if (placementAction === 'after') {
var next = targetContainer.nextElementSibling;
while (
next &&
!next.matches('.Qe_Recently-view, .Qe_best_seller') &&
next.textContent.trim() === ''
) {
next = next.nextElementSibling;
}
if (recentlyViewed && next === recentlyViewed) {
isCorrect = true;
}
} else if (placementAction === 'append') {
if (recentlyViewed && recentlyViewed.parentElement === targetContainer) {
var last = targetContainer.lastElementChild;
if (bestSeller && last === bestSeller) {
isCorrect = true;
} else if (!bestSeller && last === recentlyViewed) {
isCorrect = true;
}
}
} else if (placementAction === 'before') {
if (recentlyViewed && recentlyViewed.nextElementSibling === targetContainer) {
isCorrect = true;
}
}
if (isCorrect && recentlyViewed && bestSeller) {
var nextAfterRecently = recentlyViewed.nextElementSibling;
if (nextAfterRecently !== bestSeller) {
recentlyViewed.parentNode.insertBefore(
bestSeller,
recentlyViewed.nextSibling
);
}
}
return isCorrect;
}
/**
* Move widgets
*/
function moveWidgets() {
if (moved) return true;
var recentlyViewed = document.querySelector('.Qe_Recently-view');
var bestSeller = document.querySelector('.Qe_best_seller');
if (!recentlyViewed && !bestSeller) {
return false;
}
var targetContainer = findPagination();
var placementAction = 'after';
if (!targetContainer) {
var relatedHeading = findRelatedHeading();
if (relatedHeading) {
targetContainer = findRelatedContainer(relatedHeading);
}
}
// --- NEW FIX ---
// If the targeted element happens to be the layout-detail block itself,
// append the widget INSIDE it rather than inserting after it.
if (targetContainer && targetContainer.classList && targetContainer.classList.contains('layout-detail')) {
placementAction = 'append';
}
// ---------------
if (!targetContainer) {
// Explicitly added '.layout-detail' so the widget is appended INSIDE the correct wrapper
var productSection =
document.querySelector('.layout-detail') ||
document.querySelector('.product-section') ||
document.querySelector('.product-template__container') ||
document.querySelector('.product-single') ||
document.querySelector('[id*="ProductSection"]') ||
document.querySelector('[id*="product-template"]');
var main =
document.querySelector('.layout-main') ||
document.querySelector('main') ||
document.querySelector('#MainContent') ||
document.querySelector('.main-content');
if (productSection) {
targetContainer = productSection;
placementAction = 'append';
} else if (main) {
targetContainer = main;
placementAction = 'append';
} else {
var footer = findFooter();
if (footer) {
targetContainer = footer;
placementAction = 'before';
}
}
}
if (!targetContainer) return false;
if (isOurWidget(targetContainer)) return false;
if (
alreadyCorrectlyPlaced(
targetContainer,
recentlyViewed,
bestSeller,
placementAction
)
) {
moved = true;
if (recentlyViewed) recentlyViewed.style.clear = 'both';
if (bestSeller) bestSeller.style.clear = 'both';
stopObserver();
return true;
}
/*
* Move Recently Viewed.
*/
if (recentlyViewed) {
if (placementAction === 'after') {
targetContainer.parentNode.insertBefore(recentlyViewed, targetContainer.nextSibling);
} else if (placementAction === 'append') {
targetContainer.appendChild(recentlyViewed);
} else if (placementAction === 'before') {
targetContainer.parentNode.insertBefore(recentlyViewed, targetContainer);
}
recentlyViewed.style.display = '';
recentlyViewed.style.clear = 'both';
}
/*
* Move Best Seller after Recently Viewed.
*/
if (bestSeller) {
var anchor = recentlyViewed;
if (anchor) {
anchor.parentNode.insertBefore(bestSeller, anchor.nextSibling);
} else {
if (placementAction === 'after') {
targetContainer.parentNode.insertBefore(bestSeller, targetContainer.nextSibling);
} else if (placementAction === 'append') {
targetContainer.appendChild(bestSeller);
} else if (placementAction === 'before') {
targetContainer.parentNode.insertBefore(bestSeller, targetContainer);
}
}
bestSeller.style.display = '';
bestSeller.style.clear = 'both';
}
moved = true;
refreshSliders();
stopObserver();
return true;
}
/**
* Refresh Slick
*/
function refreshSliders() {
setTimeout(function () {
window.dispatchEvent(new Event('resize'));
if (
typeof window.jQuery !== 'undefined' &&
window.jQuery.fn &&
window.jQuery.fn.slick
) {
var recentlySlider = window.jQuery('.recently_sliders');
var bestSellerSlider = window.jQuery('.best_seller_sliders');
if (recentlySlider.length && recentlySlider.hasClass('slick-initialized')) {
recentlySlider.slick('setPosition');
}
if (bestSellerSlider.length && bestSellerSlider.hasClass('slick-initialized')) {
bestSellerSlider.slick('setPosition');
}
}
}, 300);
}
/**
* Stop observer
*/
function stopObserver() {
if (observer) {
observer.disconnect();
observer = null;
}
if (retryTimer) {
clearTimeout(retryTimer);
retryTimer = null;
}
}
/**
* Start observer
*/
function startObserver() {
if (!document.body) {
retryTimer = setTimeout(startObserver, 100);
return;
}
if (moveWidgets()) return;
observer = new MutationObserver(function () {
if (moved) return;
clearTimeout(retryTimer);
retryTimer = setTimeout(function () {
moveWidgets();
}, 100);
});
observer.observe(document.body, { childList: true, subtree: true });
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', startObserver, { once: true });
} else {
startObserver();
}
})();
body .Qe_best_seller {max-width: 1010px; margin: 0 auto; padding-left: 0; padding-right: 0; padding-top: 20px; padding-bottom: 20px;}
.Qe_Recently-view{max-width: 1010px; margin: 0 auto; padding-left:0px; padding-right:0px; padding-bottom:0px; padding-top: 0px !important;}
.Qe_Recently-view .box-slider .product_title{font-size:12px; font-weight: 400; overflow:hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; line-height:17px;}
.Qe_best_seller .box-slider{border-radius:0px;}
.Qe_best_seller .recently-viewed-ttl{font-size: 15px; font-weight: bold; text-transform: uppercase; font-family: VerbRegular-Bold;}
body .Qe_best_seller .box-slider .product_title{font-size: 12px; font-weight: 400; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; line-height:17px;}
.Qe_best_seller .box-slider .product_price_main{font-weight: 600;}
.Qe_Recently-view .box-slider .product_price_main{font-weight:600;}
.Qe_Recently-view .recently_sliders .slick-prev::before, .Qe_Recently-view .recently_sliders .slick-next::before{font-size: 22px;}
body .Qe_Recently-view .slick-prev, .slick-next{height: 22px !important; width: 22px !important;}
.Qe_Recently-view .recently-viewed-ttl{font-family: VerbRegular-Bold; font-size: 15px; font-weight: bold; text-transform: uppercase;}
.Qe_Recently-view .box-slider{border-radius:0px; padding-bottom:0px;}
.Qe_Recently-view .box-slider button.remove-product-btn:before{font-size:11px;}
.Qe_Recently-view .box-slider button.remove-product-btn{height: 18px; width: 18px;}
html body .Qe_best_seller .best_seller_sliders .slick-prev::before, .Qe_best_seller .best_seller_sliders .slick-next::before {font-size: 22px !important;}
html body .Qe_best_seller .slick-prev, .slick-next{height:22px !important; width:22px !important;}
html body .Qe_best_seller .best_seller_sliders .slick-next{height:22px !important; width:22px !important;}
@media (max-width: 767px) {
.block.layout-main .layout-detail{z-index: unset;}
}