xilly/xilly-custom-timeline.user.js

185 lines
7.8 KiB
JavaScript
Raw Normal View History

2025-12-16 12:20:00 +07:00
// ==UserScript==
// @name Xilly - Custom Timeline
// @namespace http://experimenting.website/
// @version 0.1
// @description Customize X timeline color
// @author EXPERIMENTING
// @match https://x.com/*
// @grant GM_addStyle
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_registerMenuCommand
// ==/UserScript==
(function() {
'use strict';
function getSetting(key, defaultValue) {
const value = GM_getValue(key);
return value !== undefined ? value : defaultValue;
}
let OPACITY_LEVEL = getSetting('opacityLevel', 0.8);
let BACKGROUND_COLOR = getSetting('backgroundColor', '30,44,59'); // RGB
let BLUR_LEVEL = getSetting('blurLevel', 5);
function updateCSS() {
const rgb = BACKGROUND_COLOR.split(',');
const css = `
/* Mengatur transparansi dan warna untuk elemen utama timeline */
[data-testid="primaryColumn"] {
background-color: rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${OPACITY_LEVEL}) !important;
backdrop-filter: blur(${BLUR_LEVEL}px) !important;
-webkit-backdrop-filter: blur(${BLUR_LEVEL}px) !important; /* Untuk kompatibilitas Safari */
}
/* Mengatur transparansi dan warna untuk elemen tweet individual */
article[role="article"] {
background-color: rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${OPACITY_LEVEL}) !important;
}
.css-1dbjc4n.r-1habvwh {
background-color: rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${OPACITY_LEVEL}) !important;
backdrop-filter: blur(${BLUR_LEVEL}px) !important;
-webkit-backdrop-filter: blur(${BLUR_LEVEL}px) !important;
}
.r-kritb0.r-1h8ys4a.css-175oi2r {
background-color: rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${OPACITY_LEVEL}) !important;
backdrop-filter: blur(${BLUR_LEVEL}px) !important;
-webkit-backdrop-filter: blur(${BLUR_LEVEL}px) !important;
}
.r-1awozwy.r-yfoy6g.r-18u37iz.r-1wtj0ep.r-13qz1uu.r-184en5c {
background-color: rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${OPACITY_LEVEL}) !important;
backdrop-filter: blur(${BLUR_LEVEL}px) !important;
-webkit-backdrop-filter: blur(${BLUR_LEVEL}px) !important;
}
.r-8oi148 {
background-color: rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, 0) !important;
backdrop-filter: blur(${BLUR_LEVEL}px) !important;
-webkit-backdrop-filter: blur(${BLUR_LEVEL}px) !important;
}
.r-ii8lfi {
background-color: rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${OPACITY_LEVEL}) !important;
backdrop-filter: blur(${BLUR_LEVEL}px) !important;
-webkit-backdrop-filter: blur(${BLUR_LEVEL}px) !important;
}
.r-yfoy6g {
background-color: rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${OPACITY_LEVEL}) !important;
backdrop-filter: blur(${BLUR_LEVEL}px) !important;
-webkit-backdrop-filter: blur(${BLUR_LEVEL}px) !important;
}
/* Drawer */
.r-105ug2t.r-yfoy6g.r-1867qdf.r-xnswec.r-13awgt0.r-1ce3o0f.r-1udh08x.r-u8s1d.r-13qz1uu {
background-color: rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${OPACITY_LEVEL}) !important;
backdrop-filter: blur(${BLUR_LEVEL}px) !important;
-webkit-backdrop-filter: blur(${BLUR_LEVEL}px) !important;
}
.r-g6ijar {
background-color: rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${OPACITY_LEVEL}) !important;
backdrop-filter: blur(${BLUR_LEVEL}px) !important;
-webkit-backdrop-filter: blur(${BLUR_LEVEL}px) !important;
}
/* Make post */
.r-1h8ys4a.r-dq6lxq.r-hucgq0 {
background-color: rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, 1) !important;
backdrop-filter: blur(${BLUR_LEVEL}px) !important;
-webkit-backdrop-filter: blur(${BLUR_LEVEL}px) !important;
}
.r-1iud8zs.r-1e5uvyk.r-ii8lfi.r-ne48ov.r-1nna3df {
background-color: rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, 1) !important;
backdrop-filter: blur(${BLUR_LEVEL}px) !important;
-webkit-backdrop-filter: blur(${BLUR_LEVEL}px) !important;
}
.r-yfoy6g.r-jumn1c.r-xd6kpl.r-gtdqiz.r-ipm5af.r-184en5c {
background-color: rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, 1) !important;
backdrop-filter: blur(${BLUR_LEVEL}px) !important;
-webkit-backdrop-filter: blur(${BLUR_LEVEL}px) !important;
}
/* Menjaga agar teks tetap terlihat jelas */
.css-901oao, .css-16my406, .css-1hf3ou5 {
background-color: transparent !important;
backdrop-filter: none !important;
-webkit-backdrop-filter: none !important;
}
`;
GM_addStyle(css);
}
updateCSS();
const settingsPanel = document.createElement('div');
settingsPanel.style.position = 'fixed';
settingsPanel.style.top = '50px';
settingsPanel.style.right = '10px';
settingsPanel.style.zIndex = '1000';
settingsPanel.style.backgroundColor = 'black';
settingsPanel.style.border = '1px solid #ccc';
settingsPanel.style.padding = '10px';
settingsPanel.style.display = 'none';
settingsPanel.innerHTML = `
<h3>Timeline Settings</h3>
<label for="opacitySlider">Opacity: <span id="opacityValue">${OPACITY_LEVEL}</span></label><br>
<input type="range" id="opacitySlider" min="0" max="1" step="0.1" value="${OPACITY_LEVEL}"><br>
<label for="blurSlider">Timeline Background Blur (px): <span id="blurValue">${BLUR_LEVEL}</span></label><br>
<input type="range" id="blurSlider" min="0" max="20" step="1" value="${BLUR_LEVEL}"><br>
<label for="colorPicker">Background Color:</label><br>
<input type="color" id="colorPicker" value="#${parseInt(BACKGROUND_COLOR.split(',')[0]).toString(16).padStart(2, '0')}${parseInt(BACKGROUND_COLOR.split(',')[1]).toString(16).padStart(2, '0')}${parseInt(BACKGROUND_COLOR.split(',')[2]).toString(16).padStart(2, '0')}"><br>
<button id="saveSettings">Save</button>
`;
document.body.appendChild(settingsPanel);
const opacitySlider = settingsPanel.querySelector('#opacitySlider');
const opacityValue = settingsPanel.querySelector('#opacityValue');
opacitySlider.addEventListener('input', () => {
OPACITY_LEVEL = opacitySlider.value;
opacityValue.innerText = OPACITY_LEVEL;
});
const blurSlider = settingsPanel.querySelector('#blurSlider');
const blurValue = settingsPanel.querySelector('#blurValue');
blurSlider.addEventListener('input', () => {
BLUR_LEVEL = blurSlider.value;
blurValue.innerText = BLUR_LEVEL;
});
const colorPicker = settingsPanel.querySelector('#colorPicker');
colorPicker.addEventListener('input', () => {
const hex = colorPicker.value;
const r = parseInt(hex.substr(1,2),16);
const g = parseInt(hex.substr(3,2),16);
const b = parseInt(hex.substr(5,2),16);
BACKGROUND_COLOR = `${r},${g},${b}`;
});
const saveSettingsButton = settingsPanel.querySelector('#saveSettings');
saveSettingsButton.addEventListener('click', () => {
GM_setValue('opacityLevel', OPACITY_LEVEL);
GM_setValue('backgroundColor', BACKGROUND_COLOR);
GM_setValue('blurLevel', BLUR_LEVEL);
updateCSS();
settingsPanel.style.display = 'none';
});
GM_registerMenuCommand('Setting Timeline', () => {
settingsPanel.style.display = settingsPanel.style.display === 'none' ? 'block' : 'none';
});
})();