Add sale type filters to "This Week's New Deals" page
当前为
// ==UserScript==
// @name DekuDeals - This Week's New Deals Filter
// @namespace MKScripts
// @match https://www.dekudeals.com/weekly*
// @grant none
// @version 1.1
// @author MKScripts
// @description Add sale type filters to "This Week's New Deals" page
// ==/UserScript==
(function() {
'use strict';
// Find the heading element
const headingElement = document.querySelector('h3.display-3.mb-3');
if (headingElement) {
// Create a container div for the radio buttons
const radioContainer = document.createElement('div');
radioContainer.style.display = 'flex'; // Use flexbox for layout
radioContainer.style.marginBottom = '20px'; // Make room below the div
// Create radio buttons
const radioButtons = [
createRadioButton('Show All', 'showAll', showAll),
createRadioButton('Regular Sale', 'regularSale', regularSale),
createRadioButton('Matches Previous Low', 'matchesPreviousLow', matchesPreviousLow),
createRadioButton('Lowest Price Ever', 'lowestPriceEver', lowestPriceEver)
];
// Set "Show All" as checked by default
radioButtons[0].input.checked = true;
// Append radio buttons to the container
radioButtons.forEach(({ container }) => radioContainer.appendChild(container));
// Insert the container after the heading element
headingElement.insertAdjacentElement('afterend', radioContainer);
}
// Function to create a radio button
function createRadioButton(label, value, handler) {
const radioButton = document.createElement('input');
radioButton.type = 'radio';
radioButton.name = 'dealType';
radioButton.value = value;
radioButton.style.cursor = 'pointer';
const labelElement = document.createElement('label');
labelElement.textContent = label;
labelElement.style.marginLeft = '7px'; // Add margin-left to the labels
labelElement.style.cursor = 'pointer';
// Append the radio button and label to a div
const container = document.createElement('div');
container.style.marginRight = '20px'; // Spacing between radio buttons
container.style.cursor = 'pointer';
container.appendChild(radioButton);
container.appendChild(labelElement);
// Attach event listener to the container
container.addEventListener('click', function() {
radioButton.checked = true;
handler();
});
return { input: radioButton, container };
}
// Selectors
const divItemSelector = '.col-lg-2.col-md-3.col-sm-4.col-6.cell';
const spanBadgeWarningSelector = '.badge-warning';
// Event listener for "Show All"
function showAll() {
// Get all DIVs with the specified classes
var divs = document.querySelectorAll(divItemSelector);
// Iterate through each DIV and display them
divs.forEach(function(div) {
div.style.display = 'block';
});
}
// Event listener for "Regular Sale"
function regularSale() {
// Get all DIVs with the specified classes
var divs = document.querySelectorAll(divItemSelector);
// Iterate through each DIV and hide them if they match the conditions
divs.forEach(function(div) {
var badge = div.querySelector(spanBadgeWarningSelector);
if (badge && (badge.textContent.includes('Lowest price ever') || badge.textContent.includes('Matches previous low'))) {
// Text found, hiding the div
div.style.display = 'none';
} else {
div.style.display = 'block';
}
});
}
// Event listener for "Matches Previous Low"
function matchesPreviousLow() {
// Get all DIVs with the specified classes
var divs = document.querySelectorAll(divItemSelector);
// Iterate through each DIV and hide them if they don't match the conditions
divs.forEach(function(div) {
var badge = div.querySelector(spanBadgeWarningSelector);
if (badge && badge.textContent.includes('Matches previous low')) {
// Text found, show the div
div.style.display = 'block';
} else {
// Text not found, hide the div
div.style.display = 'none';
}
});
}
// Event listener for "Lowest Price Ever"
function lowestPriceEver() {
// Get all DIVs with the specified classes
var divs = document.querySelectorAll(divItemSelector);
// Iterate through each DIV and hide them if they don't match the conditions
divs.forEach(function(div) {
var badge = div.querySelector(spanBadgeWarningSelector);
if (badge && badge.textContent.includes('Lowest price ever')) {
// Text found, show the div
div.style.display = 'block';
} else {
// Text not found, hide the div
div.style.display = 'none';
}
});
}
})();