// ==UserScript== // @name ebay Country Filter // @namespace https://greasyfork.org/ // @version 0.4.33 // @description Attempts to clear up unwanted items in your ebay search results // @author Schabernack // @match http://www.ebay.com/sch/* // @match https://www.ebay.com/sch/* // @grant none // @noframes // @downloadURL https://update.greasyfork.icu/scripts/17986/ebay%20Country%20Filter.user.js // @updateURL https://update.greasyfork.icu/scripts/17986/ebay%20Country%20Filter.meta.js // ==/UserScript== /* ebay Country Filter Attempts to clear up unwanted items in your ebay search results by hiding items being sold from certain countries A work in progress */ (function() { //print various debugging info, slightly more convienient than using the console sometimes var DEBUGON = false; var totalHidden = 0; var countriesList = JSON.parse(localStorage.getItem("ecfCountriesList")); //localstorage ecfEnabled is a STRING. Need to convert it to a boolean var enabled = localStorage.getItem("ecfEnabled") === "true"; if (DEBUGON) { console.log("\ninitial storage values"); console.log("ecfEnabled: ", enabled); console.log("ecfCountriesList:", countriesList); } //if getItem returns null then this is the first time the script it being used if (countriesList === null) { countriesList = []; } if (DEBUGON) { console.log("\nafter storage values"); console.log("ecfEnabled: ", enabled); console.log("ecfCountriesList:", countriesList); } //insert the markup into the sidebar with the other default filters //the html here is complicated mostly because I wanted to keep the same aesthetics //and structure as the rest of the page //important so this plays nicely with other ebay userscripts var enableText = `

Country Filter - Enable

Country Filter - List

`; //insert the markup into the sidebar //sometimes ebay's markup changes and I can't figure out why (layout looks identical) //the two common sidebar containers are left rail and #LeftNavContainer var sidebarContainer = $("#LeftNavContainer").length > 0 ? $("#LeftNavContainer") : $(".srp-rail__left").eq(0); sidebarContainer.prepend(enableText); //display the list of country list checkboxes if (countriesList.length !== 0) { countriesList.forEach(function(country) { printCountry(country); }); } if (enabled) { var countriesListText = countriesList.join("|"); //if the list of countries is empty or the user only added empty strings as countries if (countriesListText !== "") { var regex = new RegExp( "(?:From )(?:" + countriesList.join("|") + ")", "i" ); //go through each item li on the page and hide it if it's from an unwanted country var itemList = $("li.sresult").length > 0 ? $("li.sresult") : $("li.s-item"); itemList.each(function(index, obj) { //the "From: text" var locText = obj.textContent.trim(); if (regex.test(locText)) { //add wrapper and expand button obj.innerHTML = "
[+] Hidden - Click to expand
" + obj.innerHTML + "
"; $(this).addClass("ecf_hidden"); totalHidden++; } }); } } if (DEBUGON) { console.log("Total Hidden: " + totalHidden + "\n"); } //To do: display the total items hidden somewhere //maybe underneath the total found? or with the rest of the userscripts controls? stylesheetInit(); /* *** Functions and events *** */ /* adds country to master list and updates local storage @return true The country given is valid and could be added @return false The country given is empty/spaces */ var addCountry = function(country) { country = country.trim(); //if user entered an empty string or a bunch of spaces, ignore it if (country === "") { return false; } countriesList.push(country); localStorage.setItem("ecfCountriesList", JSON.stringify(countriesList)); if (DEBUGON) { console.log("new country list: ", countriesList); } return true; }; /* removes country from master list and updates local storage */ var removeCountry = function(country) { var index = countriesList.indexOf(country); countriesList.splice(index, 1); if (DEBUGON) { console.log("new country list: ", countriesList); } localStorage.setItem("ecfCountriesList", JSON.stringify(countriesList)); }; /* displays a given country in a checkbox on the page */ function printCountry(country) { var valStripped = country.replace(" ", ""); $("#ecf_countries_list").append(`
`); } /* clicking on the "Add Country" link will prompt the user for a country */ $("#ecf_add").on("click", function() { var val = prompt("Enter country name"); //attempt to add country to list and display it if it's valid if (addCountry(val)) { printCountry(val); } }); /* clicking on a filtered item will show/hide it */ var resultContainer = $("#Results").length > 0 ? $("#Results") : $(".srp-main"); resultContainer.on("click", ".ecf_expander", function() { $(this) .next() .slideToggle(550, "swing"); }); /* checking enable checkbox will show the list of countries div unchecking it will hide it also updates local storage */ $(document).on("change", "#ecf_enable", function() { if (DEBUGON) { console.log("ecfEnabled: " + localStorage.getItem("ecfEnabled")); } if (enabled == true) { enabled = false; localStorage.setItem("ecfEnabled", false); $("#ecf_countries").hide(); //hide the country filter - list div } else { enabled = true; localStorage.setItem("ecfEnabled", true); $("#ecf_countries").show(); //show the country filter - list div } if (DEBUGON) { console.log("ecfEnabled: " + localStorage.getItem("ecfEnabled")); } }); /* reload the page so the user's settings will take effect */ $("#ecf_apply").on("click", function() { location.reload(); }); /* unchecking a country checkbox will remove that country from the master list the checkbox will also get removed from the page as well */ $("#ecf_countries_list").on("click", ".ecf_country_checkbox", function() { var country = $(this).val(); if (DEBUGON) { console.log(country); } removeCountry(country); $(this) .parent() .parent() .remove(); //structure:
... }); /* add a new stylesheet to the page and set it up with our styles */ function stylesheetInit() { var sheet = (function() { var style = document.createElement("style"); //for webkit style.appendChild(document.createTextNode("")); document.head.appendChild(style); return style.sheet; })(); sheet.insertRule( ".ecf_wrapper { background: #333333; border: 5px solid brown; overflow: auto }", 0 ); sheet.insertRule( ".ecf_expander { cursor: pointer; height: 1.5em; line-height: 1.5em; color: #555; background-color: #fafafa; }", 0 ); sheet.insertRule( ".ecf_hidden .ecf_wrapper { background: #cccccc; display: none; }", 0 ); sheet.insertRule("#ecf_controls { margin-bottom:5px; }", 0); sheet.insertRule("#ecf_add { display:block; margin-top: 6px; }", 0); sheet.insertRule( "#ecf_apply { display:block; margin-top: 15px;color:#333333; }", 0 ); sheet.insertRule("#ecf_apply input { display:block; width:auto; }", 0); } })();