Greasy Fork

Real Estate Blocker

Hide the properties you don't like

目前为 2025-03-13 提交的版本。查看 最新版本

// ==UserScript==
// @name         Real Estate Blocker
// @namespace    http://chenglongma.com/
// @version      2025-03-12
// @description  Hide the properties you don't like
// @author       Chenglong Ma
// @match        https://www.realestate.com.au/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=realestate.com.au
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // Helper function to get cookie by name
    function getCookie(name) {
        let match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
        if (match) return match[2];
    }

    // Helper function to set cookie
    function setCookie(name, value, days) {
        let expires = "";
        if (days) {
            let date = new Date();
            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
            expires = "; expires=" + date.toUTCString();
        }
        document.cookie = name + "=" + (value || "") + expires + "; path=/";
    }

    // Function to wrap divs in details
    function wrapDivsInDetails() {
        // const divs = document.querySelectorAll('div[role="presentation"]');
        const divs = document.querySelectorAll('article');
        const defTitle = 'Click here to hide this property';
        divs.forEach(div => {
            const parent = div.parentNode;
            const details = document.createElement('details');
            details.open = true;

            const summary = document.createElement('summary');
            summary.innerHTML = '<h2 style="cursor: pointer;">' + defTitle + '</h2>';
            details.appendChild(summary);

            parent.parentNode.insertBefore(details, parent);
            details.appendChild(parent);

            const addressSpan = div.querySelector('h2.residential-card__address-heading > a > span');
            console.log("address: ", addressSpan);
            if (addressSpan) {
                const address = addressSpan.textContent;
                const cookieValue = getCookie(address);
                if (cookieValue === 'closed') {
                    details.open = false;
                }

                details.addEventListener('toggle', () => {
                    setCookie(address, details.open ? 'open' : 'closed', 365);
                    const title = details.open ? defTitle : address;
                    summary.innerHTML = '<h2 style="cursor: pointer;">' + title + '</h2>';
                });
            }
        });
    }

    // Run the function after the page loads
    wrapDivsInDetails();
})();