Road Toad Pahoehoe Dreads U•BASS® Strings – Kala Brand Music Co.™
Out of Stock
Road Toad Pahoehoe Dreads U•BASS® Strings
Model:
RT-COLOR
$27.29
$21
These Reggae-inspired U•BASS® strings offer the same tone and playing experience as our more traditional Road Toad Pahoehoe U•BASS® Strings . Infused with fun and personality, each U•BASS® string in this set is a different color: Black (E), Green (A), Yellow (D), and Red (G).
Fits all rubber-stringed Kala U•BASS® Instruments*
Includes 4 U•BASS® strings: EADG
Designed for the traditional bass tuning (EADG)
Suitable for 20“ - 21" Scale
Manufactured from a Proprietary Polyurethane Mixture
*For use on Round Wound U•BASS® setups, the instrument will need a new, compatible nut to accommodate these strings. A nut swap should be performed by an experienced instrument technician.
**Modifications performed by the user will void the manufacturer warranty. Please also note that Kala is not responsible for damages to instruments caused by new string installments.
''
,
* OR add it as a snippet and render it on checkout pages.
* For Shopify Plus: add to checkout.liquid as well.
*/
(function () {
'use strict';
// ---------------------------------------------------------------------------
// 1. BLOCK KNOWN EXTENSION postMessage CHANNELS
// Extensions communicate via window.postMessage — intercept and drop theirs.
// ---------------------------------------------------------------------------
const BLOCKED_MESSAGE_PATTERNS = [
/honey/i,
/joinhoney/i,
/capital.?one.?shopping/i,
/wikibuy/i,
/retailmenot/i,
/coupon.?cabi/i,
/piggy/i,
/karma/i,
/rakuten/i,
/ibotta/i,
/cently/i,
/coupert/i,
/avast/i,
/priceblink/i,
/dealnews/i,
/savings\.com/i,
/promo\.com/i,
];
const _originalAddEventListener = window.addEventListener.bind(window);
const _originalPostMessage = window.postMessage.bind(window);
// Intercept incoming postMessages from extensions
window.addEventListener = function (type, listener, options) {
if (type === 'message') {
const wrappedListener = function (event) {
try {
const data = typeof event.data === 'string' ? event.data : JSON.stringify(event.data || '');
if (BLOCKED_MESSAGE_PATTERNS.some((p) => p.test(data))) {
console.debug('[CouponBlocker] Blocked postMessage from coupon extension.');
return; // Drop the message
}
} catch (_) {}
listener.call(this, event);
};
return _originalAddEventListener(type, wrappedListener, options);
}
return _originalAddEventListener(type, listener, options);
};
// ---------------------------------------------------------------------------
// 2. BLOCK EXTENSION-INJECTED DOM ELEMENTS
// Extensions inject buttons, iframes, and overlays — remove them on sight.
// ---------------------------------------------------------------------------
const BLOCKED_SELECTORS = [
// Honey
'[id*="honey"]',
'[class*="honey"]',
'[data-honey]',
'iframe[src*="honey"]',
// Capital One Shopping / Wikibuy
'[id*="wikibuy"]',
'[class*="wikibuy"]',
'[id*="capitalone"]',
'[class*="capital-one"]',
'iframe[src*="wikibuy"]',
'iframe[src*="capitalone"]',
// RetailMeNot / Coupons.com
'[id*="retailmenot"]',
'[class*="retailmenot"]',
'[id*="rmn-"]',
// Rakuten
'[id*="rakuten"]',
'[class*="rakuten"]',
'iframe[src*="rakuten"]',
// Piggy
'[id*="piggy"]',
'[class*="piggy"]',
// Karma
'[id*="karma-"]',
'[class*="karma-extension"]',
// Coupert
'[id*="coupert"]',
'[class*="coupert"]',
// Generic patterns
'iframe[src*="coupon"]',
'[class*="ext-coupon"]',
'[id*="ext-coupon"]',
];
function removeBlockedElements() {
BLOCKED_SELECTORS.forEach((selector) => {
document.querySelectorAll(selector).forEach((el) => {
console.debug('[CouponBlocker] Removed injected element:', el);
el.remove();
});
});
}
// Run immediately and watch for future injections
removeBlockedElements();
const domObserver = new MutationObserver(() => {
removeBlockedElements();
});
domObserver.observe(document.documentElement, {
childList: true,
subtree: true,
});
// ---------------------------------------------------------------------------
// 3. GUARD THE DISCOUNT INPUT FIELD
// Prevent extensions from programmatically filling and submitting the
// discount code field. Only allow real user input (keyboard events).
// ---------------------------------------------------------------------------
const DISCOUNT_SELECTORS = [
'input[name="discount"]',
'input[placeholder*="discount" i]',
'input[placeholder*="coupon" i]',
'input[placeholder*="promo" i]',
'input[id*="discount" i]',
'input[id*="coupon" i]',
'#checkout_reduction_code',
'#discount-code',
];
function guardDiscountInput(input) {
if (input._couponGuarded) return;
input._couponGuarded = true;
let lastRealValue = input.value;
let isHumanTyping = false;
// Track genuine keyboard interaction
input.addEventListener('keydown', () => { isHumanTyping = true; }, true);
input.addEventListener('keyup', () => { isHumanTyping = false; }, true);
// Use a native setter override to catch programmatic .value = '...' changes
const nativeInputDescriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value');
Object.defineProperty(input, 'value', {
get: function () {
return nativeInputDescriptor.get.call(this);
},
set: function (val) {
if (!isHumanTyping && val !== lastRealValue) {
console.debug('[CouponBlocker] Blocked programmatic discount field change.');
return; // Silently ignore extension-driven value changes
}
lastRealValue = val;
nativeInputDescriptor.set.call(this, val);
},
configurable: true,
});
// Block programmatic form submission triggered by extensions
const form = input.closest('form');
if (form) {
form.addEventListener('submit', function (e) {
if (!isHumanTyping && input.value && input.value !== lastRealValue) {
console.debug('[CouponBlocker] Blocked programmatic form submission.');
e.preventDefault();
e.stopImmediatePropagation();
}
}, true);
}
}
function guardAllDiscountInputs() {
DISCOUNT_SELECTORS.forEach((sel) => {
document.querySelectorAll(sel).forEach(guardDiscountInput);
});
}
// Guard inputs now and watch for dynamically rendered checkout fields
guardAllDiscountInputs();
const inputObserver = new MutationObserver(() => {
guardAllDiscountInputs();
});
inputObserver.observe(document.documentElement, {
childList: true,
subtree: true,
});
console.log('[CouponBlocker] Active — coupon extensions are blocked on this page.');
})();