meneame.net - Destacar comentarios de usuarios recientes

Destacar comentarios de usuarios con menos de NOOB_DAYS días.

当前为 2021-11-01 提交的版本,查看 最新版本

// ==UserScript==
// @name        meneame.net - Destacar comentarios de usuarios recientes
// @namespace   http://tampermonkey.net/
// @version     2.6
// @description Destacar comentarios de usuarios con menos de NOOB_DAYS días.
// @author      Niko & оᴄнᴏсᴇʀоs
// @match       *://*.meneame.net/*
// @grant       GM_addStyle
// @grant       GM.setValue
// @grant       GM.getValue
// @grant       GM.listValues
// @grant       GM.deleteValue
// @grant       GM.xmlHttpRequest
// ==/UserScript==

// ---- SCRIPT CONFIG ----
const NOOB_DAYS = 90;
const CACHE_DAYS = 30;

// ---- API values ----
const USER_LOCATIONS = [
    ['.username',null],
    ['.news-submitted',3]
];
const REQUEST_URL = 'https://www.meneame.net/backend/get_user_info?id=';

const SVG_CSS_Tooltip = "a.SVGtooltips {position: relative;display: inline;} a.SVGtooltips span {position: absolute;width:180px;color: #FFFFFF;background: #000000;height: 30px;line-height: 30px;text-align: center;visibility: hidden;border-radius: 6px;} a.SVGtooltips span:after {content: '';position: absolute;top: 50%;right: 100%;margin-top: -8px;width: 0; height: 0;border-right: 8px solid #000000;border-top: 8px solid transparent;border-bottom: 8px solid transparent;} a:hover.SVGtooltips span {visibility: visible;opacity: 1;left: 100%;top: 50%;margin-top: -15px;margin-left: 15px;z-index: 999;}";
const SVG_L_PIC = "<a class='SVGtooltips' href='#'>&nbsp;&nbsp;<svg width='11' height='12' style='overflow: visible'> <rect style='fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.23726973;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1' height='16.553701' ry='0.88286412' rx='0.88286412' width='14.898332' id='rect858' x='-0.096365139' y='-0.096365139'></rect> <rect rx='0.55179006' ry='0.55179006' height='14.898332' x='0.73131996' y='0.73131996' width='13.242962' style='fill:#0ba800;fill-opacity:1;stroke:#000000;stroke-width:0.20416233;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1' id='rect860'></rect> <path style='fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.09538639;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1' d='M 2.7781475,1.6690757 V 14.711704 h 3.3093231 v -0.0058 H 11.927454 V 12.181045 L 5.5034726,12.161578 V 1.6496091 Z' id='rect817'></path></svg><span>XXX DÍAS PULULANDO</span></a>";

function DoDirtyThings() {
    cacheDelete();
    GM_addStyle(SVG_CSS_Tooltip);
    highlightNoobUsers();
};

function highlightNoobUsers() {
    for(var userLocation of USER_LOCATIONS) {
		let usernames = document.querySelectorAll(userLocation[0]);
        let childNodeNumber = userLocation[1];
        usernames.forEach(function(node) {
            checkIfUserIsNoob(node, childNodeNumber);
        });
    }
}

async function checkIfUserIsNoob(node, childnode) {
    var user = "";
    if (childnode) {
        user = node.childNodes[childnode].textContent;
    } else {
        user = node.textContent;
    }
    let date = await GM.getValue(user, "");
    if (date === "") date = requestRegistrationDate(user);
    let days = daysSinceRegistration(date);
    if (days < NOOB_DAYS) node.insertAdjacentHTML('afterend', SVG_L_PIC.replace("XXX",Math.floor(days)));
}

function requestRegistrationDate(user) {
    GM.xmlHttpRequest(
		{method: "GET", url: REQUEST_URL + user, onload: function(result) {
            const dateRegex = /((0[1-9]|[12]\d|3[01])-(0[1-9]|1[0-2])-[12]\d{3})/;
            const date = result.responseText.match(dateRegex);
            if (user != "") GM.setValue(user, date[0]);
			}
		}
	);
}

function daysSinceRegistration(dateStr) {
    const dateArray = dateStr.toString().split('-');
    const date = new Date(dateArray[2], dateArray[1] - 1, dateArray[0]);
    return (Date.now() - date.getTime()) / 8.64e7;
}

async function cacheDelete() {
    const UPDATE_DATE_KEY = "_CACHE_CLEAR_DATE_"    
    let lastClearDate = await GM.getValue(UPDATE_DATE_KEY, "");
    if (lastClearDate === "") {
        GM.setValue(UPDATE_DATE_KEY, Date.now());
    } else {
        if ((Date.now() - lastClearDate) / 8.64e7 > CACHE_DAYS) {
            let values = await GM.listValues();
            values.forEach( function(value) {GM.deleteValue(value);});
            GM.setValue(UPDATE_DATE_KEY, Date.now());
        }
    }
}

DoDirtyThings();

QingJ © 2025

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