Kiwifarms - Expand Avatars on Hover

Expand avatars on hover for Kiwifarms Users

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Kiwifarms - Expand Avatars on Hover
// @namespace    typpi.online
// @version      1.2.1
// @description  Expand avatars on hover for Kiwifarms Users
// @author       Nick2bad4u
// @match        kiwifarms.com/*
// @match        kiwifarms.net/*
// @match        kiwifarms.ms/*
// @match        kiwifarms.ru/*
// @match        kiwifarms.is/*
// @match        kiwifarms.top/*
// @match        kiwifarms.tw/*
// @match        kiwifarms.hk/*
// @match        kiwifarms.nl/*
// @match        sneed.today/*
// @match        kiwifarms.pl/*
// @match        kiwifarms.st/*
// @connect      kiwifarms.st/*
// @grant        GM_registerMenuCommand
// @grant        GM_setValue
// @grant        GM_getValue
// @homepageURL  https://github.com/Nick2bad4u/UserStyles
// @license      Unlicense
// @resource     https://www.google.com/s2/favicons?sz=64&domain=kiwifarms.st
// @icon         https://www.google.com/s2/favicons?sz=64&domain=kiwifarms.st
// @icon64       https://www.google.com/s2/favicons?sz=64&domain=kiwifarms.st
// @tag          kiwifarms
// ==/UserScript==

/* eslint-disable no-undef */

(function () {
	'use strict';

	// Default settings
	const defaultSize = 400;
	const defaultScale = 2;
	let avatarSize = GM_getValue('avatarSize', defaultSize);
	let avatarScale = GM_getValue('avatarScale', defaultScale);

	// Add custom styles for the expanded avatar
	const style = document.createElement('style');
	style.textContent = `
			.expanded-avatar {
					position: absolute;
					border: 2px solid #000;
					border-radius: 50%;
					max-width: ${avatarSize}px;
					max-height: ${avatarSize}px;
					z-index: 9999;
					display: none;
					transform: scale(${avatarScale});
			}
	`;
	document.head.appendChild(style);

	// Create an element to show the expanded avatar
	const expandedAvatar = document.createElement('img');
	expandedAvatar.className = 'expanded-avatar';
	document.body.appendChild(expandedAvatar);

	// Function to show the expanded avatar
	function showExpandedAvatar(event) {
			const avatar = event.target;
			expandedAvatar.src = avatar.src;
			expandedAvatar.style.left = `${event.pageX + 60}px`;
			expandedAvatar.style.top = `${event.pageY + 60}px`;
			expandedAvatar.style.display = 'block';
	}

	// Function to hide the expanded avatar
	function hideExpandedAvatar() {
			expandedAvatar.style.display = 'none';
	}

	// Attach event listeners to avatar images
	document.querySelectorAll('.avatar img').forEach((avatar) => {
			avatar.addEventListener('mouseover', showExpandedAvatar);
			avatar.addEventListener('mouseout', hideExpandedAvatar);
	});

	// Update avatar position on mouse move
	document.addEventListener('mousemove', (event) => {
			if (expandedAvatar.style.display === 'block') {
					expandedAvatar.style.left = `${event.pageX + 60}px`;
					expandedAvatar.style.top = `${event.pageY + 60}px`;
			}
	});

	// Function to set avatar size
	function setAvatarSize() {
			const size = prompt('Enter the avatar size (in pixels, max 400):', avatarSize);
			if (size !== null) {
					// Check if the input is a valid number and within the limit
					const parsedSize = parseInt(size, 10);
					if (!isNaN(parsedSize) && parsedSize > 0 && parsedSize <= 400) {
							avatarSize = parsedSize;
							GM_setValue('avatarSize', avatarSize);
							updateStyle();
					} else {
							alert('Please enter a valid positive number up to 400 for avatar size.');
					}
			}
	}

	// Function to set avatar scale
	function setAvatarScale() {
			const scale = prompt('Enter the avatar scale (e.g., 2 for 200%):', avatarScale);
			if (scale !== null) {
					// Check if the input is a valid number
					const parsedScale = parseFloat(scale);
					if (!isNaN(parsedScale) && parsedScale > 0 && parsedScale <= 2) {
							avatarScale = parsedScale;
							GM_setValue('avatarScale', avatarScale);
							updateStyle();
					} else {
							alert('Please enter a valid positive number for avatar scale.');
					}
			}
	}

	// Function to update the custom styles
	function updateStyle() {
			style.textContent = `
					.expanded-avatar {
							position: absolute;
							border: 2px solid #000;
							border-radius: 50%;
							max-width: ${avatarSize}px;
							max-height: ${avatarSize}px;
							z-index: 9999;
							display: none;
							transform: scale(${avatarScale});
					}
			`;
	}

	// Register menu commands to set avatar size and scale
	GM_registerMenuCommand('Set Avatar Hover Size', setAvatarSize);
	GM_registerMenuCommand('Set Avatar Hover Scale', setAvatarScale);
})();