// ==UserScript== // @name Wish.com - Price filter & more // @namespace http://tampermonkey.net/ // @version 2.3 // @description Filtering by min/max price & allow hidding free products // @author Shuunen, obscenelysad@gmail.com // @match https://*.wish.com/* // @grant none // @downloadURL none // ==/UserScript== $(document).ready(function() { console.log('wish price filter : init'); // Returns a function, that, as long as it continues to be invoked, will not // be triggered. The function will be called after it stops being called for // N milliseconds. If `immediate` is passed, trigger the function on the // leading edge, instead of the trailing. function debounce(func, wait, immediate) { var timeout; return function() { var context = this, args = arguments; var later = function() { timeout = null; if (!immediate) func.apply(context, args); }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) func.apply(context, args); }; } function showHideProducts() { // hide already rated products in order hsitory $('.edit-rating-button').parents('.transaction-expanded-row-item').hide(); // hide products that can't be rated $('.late-box').parents('.transaction-expanded-row-item').hide(); console.log('wish price filter : showHideProducts'); var minPrice = parseInt($("#wtc_min_price").val()) || 0; var maxPrice = parseInt($("#wtc_max_price").val()) || 1000; var hideFree = $("#wtc_hide_free").is(':checked'); sessionStorage.wishHidefree = hideFree; // console.log('wish price filter : hide free items ?', hideFree); var items = $(".feed-actual-price"); $.each( items, function() { var price = $(this).text().replace(/\D/g,''); var priceOk = (price <= maxPrice); if(minPrice && minPrice > 0){ priceOk = priceOk && (price >= minPrice); } if(priceOk && hideFree && this.textContent.includes('Free')){ priceOk = false; } $(this).parent().parent().parent().parent().toggle(priceOk); }); } if ($("#nav-search").length > 0){ $('#mobile-app-buttons').hide(); $('#nav-search-input-wrapper').width(320); var html = '
'; html += 'Min / Max Price :  /'; html += '
'; html += 'Hide free : '; html += '
'; $("#header-left").after(html); } // restore previous choices var hideFreeCheckbox = $("#wtc_hide_free"); hideFreeCheckbox.attr('checked', (sessionStorage.wishHidefree === 'true')); // prepare a debounced function var showHideProductsDebounced = debounce(showHideProducts, 500); // trigger twice by default showHideProductsDebounced(); setTimeout(showHideProductsDebounced, 1000); // when window is scrolled window.onscroll = showHideProductsDebounced; // when input value change $("#wtc_hide_free").change(showHideProductsDebounced); $("#wtc_min_price").keydown(showHideProductsDebounced); $("#wtc_max_price").keydown(showHideProductsDebounced); });