feat: implement WooCommerce storefront foundation
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
/**
|
||||
* XShop Product Gallery — vanilla, accessible, RTL-safe.
|
||||
* Swaps main image on thumbnail click/keyboard.
|
||||
*/
|
||||
(function () {
|
||||
'use strict';
|
||||
function initGalleries() {
|
||||
var galleries = document.querySelectorAll('[data-xshop-gallery]');
|
||||
galleries.forEach(function (gal) {
|
||||
var mainImg = gal.querySelector('[data-xshop-main-image]');
|
||||
var thumbs = gal.querySelectorAll('.xshop-product__thumb');
|
||||
if (!mainImg || !thumbs.length) return;
|
||||
thumbs.forEach(function (btn) {
|
||||
btn.addEventListener('click', function () {
|
||||
var large = btn.getAttribute('data-large');
|
||||
if (!large) return;
|
||||
mainImg.setAttribute('src', large);
|
||||
thumbs.forEach(function (t) {
|
||||
t.classList.remove('is-active');
|
||||
t.setAttribute('aria-selected', 'false');
|
||||
});
|
||||
btn.classList.add('is-active');
|
||||
btn.setAttribute('aria-selected', 'true');
|
||||
});
|
||||
btn.addEventListener('keydown', function (e) {
|
||||
if (e.key !== 'ArrowLeft' && e.key !== 'ArrowRight' && e.key !== 'Home' && e.key !== 'End') return;
|
||||
e.preventDefault();
|
||||
var idx = Array.prototype.indexOf.call(thumbs, btn);
|
||||
var next;
|
||||
if (e.key === 'Home') next = 0;
|
||||
else if (e.key === 'End') next = thumbs.length - 1;
|
||||
else if (e.key === 'ArrowLeft') next = idx > 0 ? idx - 1 : thumbs.length - 1;
|
||||
else next = idx < thumbs.length - 1 ? idx + 1 : 0;
|
||||
thumbs[next].focus();
|
||||
thumbs[next].click();
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', initGalleries);
|
||||
} else {
|
||||
initGalleries();
|
||||
}
|
||||
})();
|
||||
Reference in New Issue
Block a user