148 lines
5.9 KiB
JavaScript
148 lines
5.9 KiB
JavaScript
// ==UserScript==
|
||
// @name Chaturbate 缩略图放大 2 倍
|
||
// @namespace https://chaturbate.com/
|
||
// @version 0.3.5
|
||
// @description 通过放大 grid 最小列宽来放大房间列表缩略图,保留原站填满行为
|
||
// @match https://chaturbate.com/*
|
||
// @match https://*.chaturbate.com/*
|
||
// @run-at document-start
|
||
// @grant none
|
||
// ==/UserScript==
|
||
|
||
(function () {
|
||
"use strict";
|
||
|
||
// ========== 配置项 ==========
|
||
// 最小列宽倍数(原站约 174px / 180px,乘以该倍数后作为新的 minmax 最小值,1fr 仍填满整行)
|
||
const SCALE = 2;
|
||
// Discover 轮播容器高度倍数(< SCALE 可减少空白,文字区未等比放大)
|
||
const CONTAINER_HEIGHT_SCALE = 1.75;
|
||
// ===========================
|
||
|
||
const MIN_COL_MAIN = 174; // #main 下的 min
|
||
const MIN_COL_ROOT = 180; // #roomlist_root、频道页下方(180×101) 的 min
|
||
const minMain = Math.round(MIN_COL_MAIN * SCALE);
|
||
const minRoot = Math.round(MIN_COL_ROOT * SCALE);
|
||
// Discover 原高:triple 550/534, double 366/350, single 182/166
|
||
const h = (ul, arrow) => ({ ul: Math.round(ul * CONTAINER_HEIGHT_SCALE), arrow: Math.round(arrow * CONTAINER_HEIGHT_SCALE) });
|
||
const triple = h(550, 534), double = h(366, 350), single = h(182, 166);
|
||
|
||
const style = document.createElement("style");
|
||
style.id = "tm-thumb-scale-style";
|
||
style.textContent = `
|
||
#main #roomlist_root .roomlist_container ul.list,
|
||
#main #roomlist_root .placeholder_roomlist_container ul.list {
|
||
grid-template-columns: repeat(auto-fill, minmax(${minMain}px, 1fr)) !important;
|
||
}
|
||
#roomlist_root .roomlist_container ul.list,
|
||
#roomlist_root .placeholder_roomlist_container ul.list {
|
||
grid-template-columns: repeat(auto-fill, minmax(${minRoot}px, 1fr)) !important;
|
||
}
|
||
/* 频道页下方:列表在 .BaseRoomContents 内,统一用该祖先即可 */
|
||
.BaseRoomContents ul.list {
|
||
display: grid !important;
|
||
grid-gap: 0.6em 0.75em !important;
|
||
grid-template-columns: repeat(auto-fill, minmax(${minRoot}px, 1fr)) !important;
|
||
}
|
||
.BaseRoomContents ul.list li {
|
||
width: auto !important;
|
||
max-width: none !important;
|
||
max-height: none !important;
|
||
}
|
||
.BaseRoomContents ul.list .room_thumbnail_container {
|
||
display: block !important;
|
||
width: 100% !important;
|
||
}
|
||
.BaseRoomContents ul.list .room_thumbnail_container img {
|
||
width: 100% !important;
|
||
height: auto !important;
|
||
display: block !important;
|
||
max-width: none !important;
|
||
}
|
||
/* 关注页:只给下拉层设一次 min-width,避免与父级重复放大导致只显示一列 */
|
||
.followedDropdown.dropdown {
|
||
min-width: calc(2 * ${minRoot}px + 2em) !important;
|
||
}
|
||
/* 强制两列,避免 auto-fill 在窄容器里排成单列导致单格过宽(看起来像放大两次) */
|
||
.followRecommendedContainer .followRoomTable {
|
||
display: grid !important;
|
||
grid-template-columns: repeat(2, minmax(${minRoot}px, 1fr)) !important;
|
||
grid-gap: 0.6em 0.75em !important;
|
||
}
|
||
.followRecommendedContainer .followRoomTable > div,
|
||
.followRecommendedContainer .followRoomTable > div > div {
|
||
display: contents !important;
|
||
}
|
||
/* 卡片与图片固定为 minRoot 宽(只放大一次),覆盖站点内联 width:180 height:126 */
|
||
.followRecommendedContainer .roomElement {
|
||
width: ${minRoot}px !important;
|
||
min-width: ${minRoot}px !important;
|
||
max-width: ${minRoot}px !important;
|
||
height: auto !important;
|
||
}
|
||
.followRecommendedContainer .roomElementAnchor {
|
||
width: 100% !important;
|
||
height: auto !important;
|
||
display: block !important;
|
||
}
|
||
.followRecommendedContainer .room_thumbnail {
|
||
width: 100% !important;
|
||
height: auto !important;
|
||
display: block !important;
|
||
}
|
||
/* Discover 页:轮播缩略图 + 容器高度(CONTAINER_HEIGHT_SCALE 倍,默认 1.75) */
|
||
.carousel-root .triple-rows ul.list,
|
||
#discover_root .triple-rows ul.list {
|
||
height: ${triple.ul}px !important;
|
||
}
|
||
.carousel-root .triple-rows .carousel-arrow-container,
|
||
#discover_root .triple-rows .carousel-arrow-container {
|
||
height: ${triple.arrow}px !important;
|
||
}
|
||
.carousel-root .double-rows ul.list,
|
||
#discover_root .double-rows ul.list {
|
||
height: ${double.ul}px !important;
|
||
}
|
||
.carousel-root .double-rows .carousel-arrow-container,
|
||
#discover_root .double-rows .carousel-arrow-container {
|
||
height: ${double.arrow}px !important;
|
||
}
|
||
.carousel-root .single-row ul.list,
|
||
#discover_root .single-row ul.list {
|
||
height: ${single.ul}px !important;
|
||
}
|
||
.carousel-root .single-row .carousel-arrow-container,
|
||
#discover_root .single-row .carousel-arrow-container {
|
||
height: ${single.arrow}px !important;
|
||
}
|
||
.carousel-root .room-list-carousel ul.list > li,
|
||
#discover_root .room-list-carousel ul.list > li {
|
||
width: ${minRoot}px !important;
|
||
min-width: ${minRoot}px !important;
|
||
max-width: ${minRoot}px !important;
|
||
flex: 0 0 ${minRoot}px !important;
|
||
}
|
||
.carousel-root .room-list-carousel .room_thumbnail_container,
|
||
#discover_root .room-list-carousel .room_thumbnail_container {
|
||
display: block !important;
|
||
width: 100% !important;
|
||
}
|
||
.carousel-root .room-list-carousel .room_thumbnail_container img,
|
||
.carousel-root .room-list-carousel .room_thumbnail,
|
||
#discover_root .room-list-carousel .room_thumbnail_container img,
|
||
#discover_root .room-list-carousel .room_thumbnail {
|
||
width: 100% !important;
|
||
height: auto !important;
|
||
display: block !important;
|
||
max-width: none !important;
|
||
}
|
||
`;
|
||
|
||
const inject = () => {
|
||
if (!document.getElementById("tm-thumb-scale-style"))
|
||
(document.head || document.documentElement).appendChild(style);
|
||
};
|
||
if (document.head) inject();
|
||
else document.addEventListener("DOMContentLoaded", inject);
|
||
})();
|