您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Colorize all users in tickers.
- // ==UserScript==
- // @name Der Standard - User Highlighting
- // @namespace http://tampermonkey.net/
- // @version 0.3.1
- // @description Colorize all users in tickers.
- // @author Winston Smith
- // @license MIT
- // @match https://www.derstandard.at/jetzt/livebericht/*
- // @icon https://www.google.com/s2/favicons?domain=derstandard.at
- // @grant none
- // ==/UserScript==
- // Text and background colors for yourself.
- // Use null for default.
- const OWN_BACKGROUND_COLOR = "gold";
- const OWN_TEXT_COLOR = null;
- // Color settings for other users.
- // If enabled, the color will be generated based on the user ID.
- const OTHER_COLORS_ENABLED = true;
- // Minimum value for color components to avoid dark colors.
- // Has to be between 0 and 255. The resulting color is the original value
- // scaled between MIN_COLOR_INTENSITY and 255.
- // Higher values result in brighter colors.
- const MIN_COLOR_INTENSITY = 128;
- // We use Knuth's multiplicative hash to generate colors, so salting it should lead
- // to different colors for users.
- const HASH_SALT = 0;
- function generateColor(userId) {
- const num = (((userId + HASH_SALT) * 2654435761) >>> 0);
- var r = (num & 0xFF0000) >> 16;
- var g = (num & 0x00FF00) >> 8;
- var b = num & 0x0000FF;
- r = Math.floor(MIN_COLOR_INTENSITY + (r / 256) * (256 - MIN_COLOR_INTENSITY));
- g = Math.floor(MIN_COLOR_INTENSITY + (g / 256) * (256 - MIN_COLOR_INTENSITY));
- b = Math.floor(MIN_COLOR_INTENSITY + (b / 256) * (256 - MIN_COLOR_INTENSITY));
- // Convert to hex and return as a color
- return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;
- }
- function colorizeElement(ownerId, e) {
- const userContainer = e.querySelector("a.upost-usercontainer");
- const parts = userContainer.href.split("/");
- const userId = parts[parts.length - 1];
- if (userId == ownerId) {
- e.style.backgroundColor = OWN_BACKGROUND_COLOR;
- e.style.color = OWN_TEXT_COLOR;
- } else if (OTHER_COLORS_ENABLED) {
- e.style.backgroundColor = generateColor(userId);
- }
- }
- (function() {
- 'use strict';
- // Executed on DOM changes.
- function onDomChange() {
- highlightYourself();
- }
- const observer = new MutationObserver(onDomChange);
- const targetNode = document.body;
- const config = { childList: true, subtree: true };
- observer.observe(targetNode, config);
- function highlightYourself() {
- let ownerId = JSON.parse(localStorage.userdata).value.communityIdentityId;
- let xpath = `//a[contains(@href, '/legacy/') and contains(@class, 'upost-usercontainer')]/..`;
- let nodes = document.evaluate(xpath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
- for (let i = 0; i < nodes.snapshotLength; i++) {
- const element = nodes.snapshotItem(i);
- colorizeElement(ownerId, element);
- }
- }
- })();