Зустрічайте лімітовану колекцію "Гарбуз" — передзамовлення вже відкрито🧡
0
Додайте товари до кошика
  • 50 років краси
    Створені природою, сформовані спільнотою та вкорінені в бунтарському дусі, наші продукти завжди створювалися з думкою про красу кожного тіла
  • Чесна торгівля з любов'ю
    Створюємо значущий і позитивний вплив завдяки чесній торгівлі, що допомагає підтримувати місцевий бізнес, ініціативи, а також родини й домогосподарства
  • Етично отримані інгредієнти
    Інгредієнти натурального походження збагачують наші продукти – виготовлені, зібрані та сформовані вручну колективами жінок-ремісниць з усього світу
  • Розширення прав і можливостей жінок
    Бути союзником жінок та дівчат у всьому світі, визнаючи та надаючи голос жіночій незалежності, силі і правам через наші торговельні партнерства
/* ============================================================ СКРИПТ 14 (v0, ТЕСТОВА ВЕРСІЯ): UPT-акція — автокупон за кількістю 3 шт → UPT_10, 4 шт → UPT_15, 5+ шт → UPT_20. Рахує ВСІ одиниці в кошику (включно з акційними товарами). Знижку на акційні товари не дає сам Horoshop (у купона allow_product_discount: false). Ручний промокод клієнта (не UPT) НЕ перезаписується. Для тесту: вставити в консоль DevTools і працювати з кошиком. ============================================================ */ (function () { var TIERS = [ // від більшого до меншого { min: 5, code: 'UPT_20' }, { min: 4, code: 'UPT_15' }, { min: 3, code: 'UPT_10' } ]; var UPT_CODES = TIERS.map(function (t) { return t.code; }); var ENDPOINT_SET = '/_widget/ajax_cart/setCouponCode/'; var busy = false; var DEBUG = true; function log() { if (DEBUG) console.log.apply(console, ['[UPT]'].concat([].slice.call(arguments))); } function targetCode(qty) { for (var i = 0; i < TIERS.length; i++) if (qty >= TIERS[i].min) return TIERS[i].code; return ''; } function sendCoupon(code) { busy = true; log('→ setCouponCode', JSON.stringify(code)); var body = new URLSearchParams({ code: code, skin: 'modal', marker: 'DEFAULT' }); return fetch(ENDPOINT_SET, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'X-Requested-With': 'XMLHttpRequest' }, body: body.toString(), credentials: 'same-origin' }) .then(function (r) { return r.json(); }) .then(function (data) { log('← відповідь', data && data.status, data && data.response && data.response.errors); return data; }) .catch(function (e) { log('помилка', e); }) .finally(function () { busy = false; }); } function handleCart(data) { if (busy) return; var total = data && data.response && data.response.total; if (!total || !total.total) return; var qty = parseInt(total.total.quantity, 10) || 0; var current = (total.coupon_data && total.coupon_data.isSet && total.coupon_data.code) || ''; var target = targetCode(qty); log('кількість:', qty, '| купон зараз:', current || '—', '| потрібен:', target || '—'); // Ручний не-UPT промокод не чіпаємо if (current && UPT_CODES.indexOf(current) === -1) return; if (current === target) return; // Порожній target = зняття купона (сервер відповідає status: COUPON_CLEARED) sendCoupon(target); } function isCartUrl(url) { return /\/_widget\/ajax_cart\//.test(url || ''); } // fetch var origFetch = window.fetch; window.fetch = function () { return origFetch.apply(this, arguments).then(function (res) { if (isCartUrl(res.url)) res.clone().json().then(handleCart).catch(function () {}); return res; }); }; // XHR (Horoshop, ймовірно, ходить через jQuery → XHR) var origOpen = XMLHttpRequest.prototype.open; var origSend = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.open = function (m, url) { this._uptUrl = url; return origOpen.apply(this, arguments); }; XMLHttpRequest.prototype.send = function () { var xhr = this; if (isCartUrl(xhr._uptUrl)) { xhr.addEventListener('load', function () { try { handleCart(JSON.parse(xhr.responseText)); } catch (e) {} }); } return origSend.apply(this, arguments); }; log('UPT скрипт активний'); })();