Cift tiklayinca renk degistiren ve hafizada tutan modern arayuz.
// ==UserScript==
// @name Prompt Canavari
// @namespace https://greasyfork.org/users/1557870
// @version 1.31.1
// @description Cift tiklayinca renk degistiren ve hafizada tutan modern arayuz.
// @author eyup
// @match https://chatgpt.com/*
// @match https://gemini.google.com/*
// @match https://aistudio.google.com/*
// @match https://notebooklm.google.com/*
// @match https://grok.com/*
// @match https://claude.ai/*
// @match https://www.kimi.com/*
// @match https://chat.mistral.ai/*
// @match https://www.perplexity.ai/*
// @match https://www.meta.ai/*
// @match https://poe.com/*
// @match https://deepai.org/*
// @match https://huggingface.co/chat/*
// @match https://chat.deepseek.com/*
// @match https://chat.qwen.ai/*
// @match https://manus.im/*
// @match https://chat.z.ai/*
// @match https://longcat.chat/*
// @match https://chatglm.cn/*
// @match https://web.chatboxai.app/*
// @match https://lmarena.ai/*
// @match https://spacefrontiers.org/*
// @match https://app.scienceos.ai/*
// @match https://evidencehunt.com/*
// @match https://playground.allenai.org/*
// @match https://paperfigureqa.allen.ai/*
// @match https://scira.ai/*
// @match https://exa.ai/*
// @match https://consensus.app/*
// @match https://www.openevidence.com/*
// @match https://www.pathway.md/*
// @match https://math-gpt.org/*
// @grant GM_addStyle
// @license MIT
// ==/UserScript==
(function () {
'use strict';
const NAV_WIDTH = 260;
const NAV_COLLAPSED_WIDTH = 60;
const DEBOUNCE_TIME = 500;
const AISTUDIO_DEBOUNCE_TIME = 200;
let activeMessageIndex = -1;
let lastUrl = window.location.href;
let lastPromptsContent = "";
let cachedPrompts = [];
let urlCheckInterval = null;
// --- COLOR SWITCH SYSTEM ---
const COLORED_STORAGE_KEY = 'aminoglu_colored_prompts_v2';
const COLOR_CYCLE = ['green', 'blue', 'red', 'yellow'];
// Renk verisini obje olarak tutuyoruz: { "prompt metni": "green", ... }
function getColoredPrompts() {
try {
return JSON.parse(localStorage.getItem(COLORED_STORAGE_KEY) || '{}');
} catch (e) { return {}; }
}
function cycleColor(text) {
let data = getColoredPrompts();
let currentColor = data[text];
let nextColor = null;
if (!currentColor) {
// Hiç yoksa ilk renge (Yeşil) geç
nextColor = COLOR_CYCLE[0];
} else {
// Mevcut rengin indexini bul
let idx = COLOR_CYCLE.indexOf(currentColor);
// Eğer son renkteyse (Sarı) veya bilinmeyen bir renkse -> Kaldır
if (idx === -1 || idx === COLOR_CYCLE.length - 1) {
nextColor = null;
} else {
// Değilse bir sonrakine geç
nextColor = COLOR_CYCLE[idx + 1];
}
}
if (nextColor) {
data[text] = nextColor;
} else {
delete data[text]; // Listeden sil
}
localStorage.setItem(COLORED_STORAGE_KEY, JSON.stringify(data));
updateMessageList(true); // Arayüzü güncelle
}
function getColor(text) {
return getColoredPrompts()[text] || null;
}
// ----------------------------------
function getAIStudioData() {
const prompts = [];
const scrollButtons = document.querySelectorAll('ms-prompt-scrollbar button[id^="scrollbar-item-"]');
scrollButtons.forEach(btn => {
const isUser = btn.querySelector('.prompt-scrollbar-dot');
if (isUser) {
const text = btn.getAttribute('aria-label');
if (text) {
prompts.push({
element: btn,
text: text.trim()
});
}
}
});
return prompts;
}
const SITE_CONFIGS = {
chatgpt: { domain: 'chatgpt.com', includePath: ['chatgpt.com/c/', 'chatgpt.com/g/'], promptSelector: 'div[data-message-author-role="user"]', shiftTarget: 'div[data-scroll-root="true"]' },
gemini: { domain: 'gemini.google.com', includePath: ['gemini.google.com/app/','gemini.google.com/gem/'], promptSelector: '.query-text', shiftTarget: 'chat-app, .boqOnegoogleliteOgbOneGoogleBar, top-bar-actions' },
aistudio: { domain: 'aistudio.google.com', includePath: 'aistudio.google.com/prompts/', customFinder: getAIStudioData, useClick: true, shiftTarget: '.layout-wrapper', alwaysShow: true, fastUpdate: true, debounceTime: AISTUDIO_DEBOUNCE_TIME },
notebooklm: { domain: 'notebooklm.google.com', includePath: 'notebooklm.google.com/notebook/', promptSelector: 'chat-message .from-user-container', shiftTarget: 'notebook, .boqOnegoogleliteOgbOneGoogleBar' },
grok: { domain: 'grok.com', includePath: 'grok.com/c/', promptSelector: '.relative.group.flex.flex-col.justify-center.items-end', shiftTarget: 'main' },
claude: { domain: 'claude.ai', includePath: 'claude.ai/chat/', promptSelector: 'div.group.relative.inline-flex', shiftTarget: '.flex.flex-1.h-full.w-full.overflow-hidden.relative' },
mistral: { domain: 'chat.mistral.ai', includePath: 'chat.mistral.ai/chat/', promptSelector: 'div[data-message-author-role="user"] div[dir="auto"]', shiftTarget: 'main.bg-sidebar-subtle' },
perplexity: { domain: 'perplexity.ai', includePath: 'www.perplexity.ai/search/', promptSelector: 'div.group\\/title', shiftTarget: '#root' },
meta: { domain: 'meta.ai', includePath: 'www.meta.ai/prompt/', promptSelector: '.x78zum5.x15zctf7', shiftTarget: '.xph554m.x73z65k' },
poe: { domain: 'poe.com', includePath: 'poe.com/chat/', promptSelector: '[class*="ChatMessagesView_tupleGroupContainer"] > div > div:first-child', shiftTarget: '[class*="CanvasSidebarLayout_chat-column"]' },
deepai: { domain: 'deepai.org', includePath: 'deepai.org/chat', promptSelector: '.chatbox', shiftTarget: '.chat-layout-container, .new-chat-button-container, .persistent-compose-area' },
huggingface: { domain: 'huggingface.co', includePath: 'huggingface.co/chat/conversation/', promptSelector: '.disabled.w-full.appearance-none', shiftTarget: '.relative.min-h-0.min-w-0' },
deepseek: { domain: 'chat.deepseek.com', includePath: 'chat.deepseek.com/a/chat/', promptSelector: '#root > div > div > div:nth-child(2) > div:nth-child(3) > div > div:nth-child(2) > div > div:nth-child(2) > div:nth-child(1) > div:nth-child(odd)', shiftTarget: '#root > div > div > div:nth-child(2) > div:nth-child(3) > div > div:nth-child(2) > div' },
kimi: { domain: 'www.kimi.com', includePath: 'www.kimi.com/chat/', promptSelector: '.user-content', shiftTarget:'.has-sidebar' },
glm: { domain: 'chat.z.ai', includePath: 'chat.z.ai/c/', promptSelector: '.chat-user', shiftTarget:'#chat-container' },
qwen: { domain: 'chat.qwen.ai', includePath: 'chat.qwen.ai/c/', promptSelector: '.chat-user-message', shiftTarget: '.desktop-layout-content' },
manus: { domain: 'manus.im', includePath: 'manus.im/app/', promptSelector: '.flex.relative.flex-col.gap-2.items-end', shiftTarget: '.simplebar-content' },
longcat: { domain: 'longcat.chat', promptSelector: '.user-message', shiftTarget: '.page-container', alwaysShow: true },
chatglm: { domain: 'chatglm.cn', includePath: 'chatglm.cn/main/alltoolsdetail?t=', promptSelector: '.question-txt.dots', shiftTarget: '.detail-container' },
chatboxai: { domain: 'web.chatboxai.app', includePath: 'web.chatboxai.app/session/', promptSelector: '.user-msg', shiftTarget: '.h-full.w-full.MuiBox-root' },
lmarena: { domain: 'lmarena.ai', includePath: 'lmarena.ai/c/', promptSelector: '.justify-end.gap-2', shiftTarget: '#chat-area' },
spacefrontiers: { domain: 'spacefrontiers.org', includePath: 'spacefrontiers.org/c/', promptSelector: '.inline.whitespace-pre-line', shiftTarget: '#app' },
scienceos: { domain: 'app.scienceos.ai', includePath: 'app.scienceos.ai/chat/c/', promptSelector: 'div[data-prompt]', shiftTarget: 'div[data-strategy]' },
evidencehunt: { domain: 'evidencehunt.com', includePath: 'evidencehunt.com/chat', promptSelector: '.chat__message:has(.message__user-image) .message__content p', shiftTarget: '.v-main' },
playground: { domain: 'playground.allenai.org', includePath: 'playground.allenai.org/thread/', promptSelector: 'div[class*="chat-message"]:nth-of-type(even)', shiftTarget: '.MuiPaper-outlined' },
paperfigure: { domain: 'paperfigureqa.allen.ai', includePath: 'paperfigureqa.allen.ai/app', promptSelector: '#chat-scroll-container > div > div:nth-of-type(odd) .MuiPaper-root', shiftTarget: '#root' },
scira: { domain: 'scira.ai', includePath: 'scira.ai/search/', promptSelector: '.max-w-full .relative', shiftTarget: '.sm\\:max-w-2xl' },
exa: { domain: 'exa.ai', includePath: 'exa.ai/search/', promptSelector: 'div[data-test-id="UserMessage"]', shiftTarget: 'div[data-test-id="ChatPresentation"]' },
consensus: { domain: 'consensus.app', includePath: 'consensus.app/search/', promptSelector: '.flex.flex-col.pt-6.w-full.max-w-page h2', shiftTarget: '#__next' },
openevidence: { domain: 'openevidence.com', includePath: 'www.openevidence.com/ask/', promptSelector: '.brandable--query-bar--container form', shiftTarget: '#__next, .brandable--query-bar--container.hide-on-print.follow-up' },
pathway: { domain: 'pathway.md', includePath: 'www.pathway.md/ai', promptSelector: '[id] > div > div > div .chakra-text' },
mathgpt: { domain: 'math-gpt.org', includePath: 'math-gpt.org/chat/', promptSelector: '.w-full.flex.items-end.flex-col.pb-8.relative', shiftTarget: '.overflow-x-hidden, .px-2.flex.flex-col.gap-1' }
};
function getCurrentConfig() {
const hostname = window.location.hostname;
for (const key in SITE_CONFIGS) {
if (hostname.includes(SITE_CONFIGS[key].domain)) {
return SITE_CONFIGS[key];
}
}
return null;
}
const CURRENT_SITE = getCurrentConfig();
if (!CURRENT_SITE) return;
// MODERN CSS INJECTION
GM_addStyle(`
#message-nav {
font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif !important;
backdrop-filter: blur(12px) !important;
-webkit-backdrop-filter: blur(12px) !important;
background: color-mix(in srgb, Canvas, transparent 15%) !important;
border-left: 1px solid rgba(128, 128, 128, 0.15) !important;
box-shadow: -4px 0 24px rgba(0, 0, 0, 0.08) !important;
border-bottom-left-radius: 12px;
transition: width 0.4s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.3s !important;
color: CanvasText !important;
}
#message-nav::-webkit-scrollbar { width: 6px; }
#message-nav::-webkit-scrollbar-track { background: transparent; }
#message-nav::-webkit-scrollbar-thumb { background-color: rgba(128, 128, 128, 0.3); border-radius: 10px; }
#message-nav::-webkit-scrollbar-thumb:hover { background-color: rgba(128, 128, 128, 0.5); }
.nav-list-item {
position: relative;
font-weight: 400;
font-size: 14px !important;
padding: 10px 12px 10px 16px !important;
border-radius: 6px;
margin: 4px 6px !important;
transition: all 0.2s ease !important;
color: inherit !important;
opacity: 0.9;
line-height: 1.4;
display: block;
border-left: 3px solid transparent;
}
.nav-list-item:hover { background-color: rgba(128, 128, 128, 0.08); opacity: 1; }
.nav-list-item.active {
font-weight: 600 !important;
background-color: rgba(128, 128, 128, 0.12);
opacity: 1;
}
.nav-list-item.active::before {
content: ''; position: absolute; left: 0; top: 50%; transform: translateY(-50%);
height: 16px; width: 3px; background-color: currentColor; border-radius: 0 4px 4px 0; opacity: 0.7;
}
/* --- RENKLER --- */
.mark-green {
border-left-color: #2ecc71 !important;
background-color: rgba(46, 204, 113, 0.08) !important;
}
.mark-blue {
border-left-color: #3498db !important;
background-color: rgba(52, 152, 219, 0.08) !important;
}
.mark-red {
border-left-color: #e74c3c !important;
background-color: rgba(231, 76, 60, 0.08) !important;
}
.mark-yellow {
border-left-color: #f1c40f !important;
background-color: rgba(241, 196, 15, 0.08) !important;
}
.nav-toggle-btn {
background: rgba(128, 128, 128, 0.1);
border: 1px solid rgba(128, 128, 128, 0.1);
cursor: pointer;
font-size: 13px; font-weight: 600; color: inherit;
padding: 6px 14px; border-radius: 20px; transition: all 0.2s ease;
backdrop-filter: blur(4px);
}
.nav-toggle-btn:hover { background: rgba(128, 128, 128, 0.2); transform: translateY(-1px); }
`);
const BASE_CONTAINER_CSS = `
right: 0px; width: ${NAV_WIDTH}px; max-height: 92vh; overflow-y: auto;
z-index: 9999;
position: fixed; text-align: left;
`;
const getShiftStyle = (width, selector = '') => {
if (!selector) return '';
const selectors = selector.split(',');
const prefixedSelector = selectors.map(s => `body.navigator-expanded ${s.trim()}`).join(', ');
return `
${selector} { transition: margin-right 0.3s ease, max-width 0.3s ease, margin-left 0.3s ease; }
${prefixedSelector} { margin-left: 0 !important; margin-right: ${width}px !important; max-width: calc(100% - ${width}px) !important; }
`;
};
const currentWidth = CURRENT_SITE.width || NAV_WIDTH;
GM_addStyle(getShiftStyle(currentWidth, CURRENT_SITE.shiftTarget || ''));
let conversationObserver = null;
let isCollapsed = false;
window.navigatorUpdateTimeout = null;
function updateBodyClassForLayout() {
const container = document.getElementById('message-nav');
const content = document.getElementById('message-nav-content');
if (container && content && content.style.display !== 'none') {
document.body.classList.add('navigator-expanded');
} else {
document.body.classList.remove('navigator-expanded');
}
}
function createContainer() {
let container = document.getElementById('message-nav');
if (!container) {
container = document.createElement('div');
container.id = 'message-nav';
const topValue = '67px';
container.style.cssText = `top: ${topValue}; ${BASE_CONTAINER_CSS}`;
const header = document.createElement('div');
Object.assign(header.style, {
display: 'flex', alignItems: 'center', justifyContent: 'space-between',
padding: '12px 16px', borderBottom: '1px solid rgba(128,128,128,0.1)', marginBottom: '5px'
});
const title = document.createElement('span');
title.textContent = 'aminoglu listecilik';
title.style.fontSize = '14px'; title.style.fontWeight = '700'; title.style.opacity = '0.7';
const toggleBtn = document.createElement('button');
toggleBtn.className = 'nav-toggle-btn';
toggleBtn.textContent = 'kapat';
header.appendChild(title);
header.appendChild(toggleBtn);
const content = document.createElement('div');
content.id = 'message-nav-content';
content.style.padding = '5px 0';
container.appendChild(header);
container.appendChild(content);
document.body.appendChild(container);
const toggleHandler = (e) => {
e.stopPropagation();
isCollapsed = !isCollapsed;
if (!isCollapsed) {
content.style.display = 'block'; title.style.display = 'block';
container.style.width = `${currentWidth}px`;
toggleBtn.textContent = 'kapat';
header.style.justifyContent = 'space-between';
} else {
content.style.display = 'none'; title.style.display = 'none';
container.style.width = `${NAV_COLLAPSED_WIDTH}px`;
toggleBtn.textContent = '<';
header.style.justifyContent = 'center';
}
updateBodyClassForLayout();
};
toggleBtn.addEventListener('click', toggleHandler);
updateBodyClassForLayout();
}
return container;
}
function findUserPrompts() {
if (CURRENT_SITE.customFinder) return CURRENT_SITE.customFinder();
const prompts = [];
if (!CURRENT_SITE.promptSelector) return prompts;
const elements = document.querySelectorAll(CURRENT_SITE.promptSelector);
elements.forEach((element) => {
const text = element.textContent.trim();
if (text) prompts.push({ element, text });
});
return prompts;
}
function findPromptElementByIndex(targetIndex) {
if (CURRENT_SITE.customFinder) {
const prompts = CURRENT_SITE.customFinder();
return prompts[targetIndex] ? prompts[targetIndex].element : null;
}
if (!CURRENT_SITE.promptSelector) return null;
const elements = document.querySelectorAll(CURRENT_SITE.promptSelector);
return elements[targetIndex] || null;
}
function createListItem(prompt, index) {
const listItem = document.createElement('li');
const previewText = prompt.text.length > 70 ? prompt.text.slice(0, 70) + '...' : prompt.text;
listItem.classList.add('nav-list-item');
// RENK KONTROLÜ
const color = getColor(prompt.text);
if (color) {
listItem.classList.add(`mark-${color}`);
}
const indexSpan = document.createElement('span');
indexSpan.textContent = index;
indexSpan.style.cssText = "opacity:0.5; font-size:11px; margin-right:6px; vertical-align:middle; display:inline-block;";
listItem.appendChild(indexSpan);
listItem.appendChild(document.createTextNode(previewText));
if (index - 1 === activeMessageIndex) {
listItem.classList.add('active');
}
// TEK TIK (GİT)
listItem.addEventListener('click', () => {
const parentList = listItem.parentElement;
if (parentList) {
parentList.querySelectorAll('.nav-list-item').forEach(li => li.classList.remove('active'));
}
listItem.classList.add('active');
activeMessageIndex = index - 1;
const targetElement = findPromptElementByIndex(index - 1);
if (targetElement) {
if (CURRENT_SITE.useClick) targetElement.click();
else targetElement.scrollIntoView({ behavior: 'smooth', block: 'start' });
} else {
if (cachedPrompts[index - 1] && cachedPrompts[index - 1].element) {
cachedPrompts[index - 1].element.scrollIntoView({ behavior: 'smooth', block: 'start' });
}
}
});
// ÇİFT TIK (RENK DEĞİŞTİR)
listItem.addEventListener('dblclick', (e) => {
e.stopPropagation();
e.preventDefault();
cycleColor(prompt.text);
});
return listItem;
}
function updateMessageList(forceUpdate = false) {
const currentUrl = window.location.href;
let container = document.getElementById('message-nav');
if (currentUrl !== lastUrl) {
lastUrl = currentUrl;
lastPromptsContent = "";
activeMessageIndex = -1;
cachedPrompts = [];
forceUpdate = true;
}
const shouldShow = CURRENT_SITE.alwaysShow || !CURRENT_SITE.includePath ||
(Array.isArray(CURRENT_SITE.includePath)
? CURRENT_SITE.includePath.some(path => currentUrl.includes(path))
: currentUrl.includes(CURRENT_SITE.includePath));
if (!shouldShow) {
if (container) { container.style.display = 'none'; document.body.classList.remove('navigator-expanded'); }
return;
}
const activeContainer = createContainer();
activeContainer.style.display = 'block';
updateBodyClassForLayout();
const content = document.getElementById('message-nav-content');
if (!content) return;
let list = content.querySelector('ul');
if (!list) {
list = document.createElement('ul');
list.style.cssText = 'padding: 0; margin: 0; list-style: none;';
content.appendChild(list);
}
const prompts = findUserPrompts();
const currentPromptsContent = prompts.map(p => p.text).join('|');
if (!forceUpdate && currentPromptsContent === lastPromptsContent) return;
lastPromptsContent = currentPromptsContent;
cachedPrompts = prompts;
while (list.firstChild) list.removeChild(list.firstChild);
if (prompts.length === 0) {
activeMessageIndex = -1;
const noContent = document.createElement('div');
noContent.textContent = 'yaz da gorelim';
noContent.style.cssText = 'color: inherit; opacity: 0.5; font-style: italic; text-align: center; padding: 20px 0; font-size: 13px;';
list.appendChild(noContent);
} else {
prompts.forEach((prompt, index) => {
const listItem = createListItem(prompt, index + 1);
list.appendChild(listItem);
});
}
}
function startUrlWatcher() {
if (!CURRENT_SITE.fastUpdate) return;
if (urlCheckInterval) clearInterval(urlCheckInterval);
urlCheckInterval = setInterval(() => {
const currentUrl = window.location.href;
if (currentUrl !== lastUrl) updateMessageList(true);
}, 300);
}
function observeConversation() {
if (conversationObserver) conversationObserver.disconnect();
const debounceTime = CURRENT_SITE.debounceTime || DEBOUNCE_TIME;
conversationObserver = new MutationObserver(() => {
clearTimeout(window.navigatorUpdateTimeout);
window.navigatorUpdateTimeout = setTimeout(() => { updateMessageList(); }, debounceTime);
});
conversationObserver.observe(document.body, { childList: true, subtree: true, characterData: false, attributes: false });
window.addEventListener('popstate', () => { lastPromptsContent = ""; cachedPrompts = []; updateMessageList(true); });
const originalPushState = history.pushState;
history.pushState = function() { originalPushState.apply(this, arguments); lastPromptsContent = ""; cachedPrompts = []; setTimeout(() => updateMessageList(true), 100); };
const originalReplaceState = history.replaceState;
history.replaceState = function() { originalReplaceState.apply(this, arguments); lastPromptsContent = ""; cachedPrompts = []; setTimeout(() => updateMessageList(true), 100); };
}
setTimeout(() => { updateMessageList(true); startUrlWatcher(); }, 1000);
observeConversation();
})();