Prolific Filter and Sorter

Allows users to sort studies.

// ==UserScript==
// @name         Prolific Filter and Sorter
// @namespace    https://gist.github.com/Kadauchi
// @version      0.1.0
// @description  Allows users to sort studies.
// @author       Kadauchi
// @include      https://app.prolific.co/*
// ==/UserScript==

const options = {
    peripheral_requirements: [], // audio, camera, download, microphone
    sort: 'average_reward_per_hour', // average_reward_per_hour, average_completion_time, reward
};

let results = {};

function handleSorting() {
    const sorted = results.sort((a, b) => {
        return b[options.sort] - a[options.sort];
    });

    const list = document.querySelector('.list');

    sorted.forEach((result) => {
        const study = document.querySelector(`[data-testid="study-${result.id}"]`);
        list.append(study);
    });
}

function handleFiltering() {
    results.forEach((result) => {
        const studyFiltered = options.peripheral_requirements.some((requirement) => result.peripheral_requirements.includes(requirement));

        if (studyFiltered) {
            const study = document.querySelector(`[data-testid="study-${result.id}"]`);
            study.style.opacity = '0.25';
        }
    });
}

function initListener() {
    const open = XMLHttpRequest.prototype.open;

    XMLHttpRequest.prototype.open = function() {
        this.addEventListener('load', () => {
            try {
                const json = JSON.parse(this.responseText);

                if (json.results && json.results.length > 0) {
                    results = json.results;
                }
            } catch {}
        });

        open.apply(this, arguments);
    };
}

function initObserver() {
    const observer = new MutationObserver((mutations) => {
        mutations.forEach((mutation) => {
            if (mutation.addedNodes) {
                const studyAdded = [...mutation.addedNodes].some((node) => node.className === 'list');

                if (studyAdded) {
                    handleSorting();
                    handleFiltering();
                }
            }
        });
    });

    observer.observe(document.body, { childList: true, subtree: true });
}


initListener();
initObserver();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址