您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
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();