Filter J.Crew sale items by "good" or "great" deals.
// ==UserScript==
// @name J.Crew Deal Filter
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Filter J.Crew sale items by "good" or "great" deals.
// @author You
// @match https://www.jcrew.com/sale/*
// @match https://www.jcrew.com/shop/*
// @grant GM_addStyle
// @license MIT
// ==/UserScript==
(function() {
'use strict';
function filterDeals(dealType) {
const productTiles = document.querySelectorAll('.c-product-tile');
productTiles.forEach(tile => {
const wasPriceElement = tile.querySelector('.tile__detail--price--was');
const nowPriceElement = tile.querySelector('.tile__detail--price--sale--old .is-price') || tile.querySelector('.ProductPrice__price-sale____mCxV .is-price'); //select color price or now price
const selectColorPriceElement = tile.querySelector('.tile__detail--price--sale');
if (wasPriceElement && nowPriceElement) {
let wasPrice = parseFloat(wasPriceElement.textContent.replace(/[^0-9.]/g, ''));
const nowPriceText = nowPriceElement.textContent.replace(/[^0-9.-]/g, '');
let nowPrice;
if (nowPriceText.includes('-')) { //handle price ranges
const priceRange = nowPriceText.split('-');
nowPrice = parseFloat(priceRange[0]);
wasPrice = parseFloat(wasPriceElement.textContent.split('-')[0].replace(/[^0-9.]/g, ''));
} else {
nowPrice = parseFloat(nowPriceText);
}
const discount = (wasPrice - nowPrice) / wasPrice * 100;
if (dealType === 'good' && discount >= 50 && discount <= 70) {
tile.style.display = 'block';
} else if (dealType === 'great' && discount > 70) {
tile.style.display = 'block';
} else {
tile.style.display = 'none';
}
} else if (selectColorPriceElement && selectColorPriceElement.textContent.includes('Select Colors')) {
tile.style.display = 'none';
}
});
}
function addFilterButtons() {
const filterBar = document.createElement('div');
const goodDealsButton = document.createElement('button');
goodDealsButton.textContent = 'Good Deals (50-70% off)';
goodDealsButton.addEventListener('click', () => filterDeals('good'));
const greatDealsButton = document.createElement('button');
greatDealsButton.textContent = 'Great Deals (70%+ off)';
greatDealsButton.addEventListener('click', () => filterDeals('great'));
const showAllButton = document.createElement('button');
showAllButton.textContent = 'Show All';
showAllButton.addEventListener('click', () => {
const productTiles = document.querySelectorAll('.c-product-tile');
productTiles.forEach(tile => {
tile.style.display = 'block';
});
});
filterBar.appendChild(goodDealsButton);
filterBar.appendChild(greatDealsButton);
filterBar.appendChild(showAllButton);
// Style the filter bar
GM_addStyle(`
#jcrew-deal-filter {
padding: 10px;
background-color: #f0f0f0;
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 10px;
flex-wrap: wrap;
}
#jcrew-deal-filter button {
background-color: #fff;
border: 1px solid #ccc;
padding: 8px 16px;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.3s ease;
font-size: 14px;
}
#jcrew-deal-filter button:hover {
background-color: #e0e0e0;
}
`);
filterBar.id = 'jcrew-deal-filter';
const productList = document.querySelector('.c-product__list');
if (productList) {
productList.parentNode.insertBefore(filterBar, productList);
}
}
addFilterButtons();
})();