A utils for ChatGPT.com
// ==UserScript==
// @name ChatGPT
// @namespace yelfive
// @version 2025-03-12
// @description A utils for ChatGPT.com
// @author You
// @match https://chatgpt.com/c/*
// @match https://chatgpt.com/
// @icon https://www.google.com/s2/favicons?sz=64&domain=chatgpt.com
// @grant none
// ==/UserScript==
(function() {
'use strict';
document.head.insertAdjacentHTML('beforeend', /*css*/`<style>
body main div[data-message-author-role="user"]>div.w-full>div.relative {
background: #6d6dff;
color: white;
}
</style>`)
function saveInput() {
const dom = document.querySelector('#prompt-textarea p');
if (!dom) return;
if (!dom.textContent) return;
const input = dom.textContent;
localStorage.setItem('__input', input);
}
// setInterval(saveInput, 500);
let lastIndex = null;
function getHistory() {
const list = [...document.querySelectorAll('[data-message-author-role="user"]')].map(d => d.querySelector('.whitespace-pre-wrap').textContent);
const unsubmitted = localStorage.getItem('__input');
if (unsubmitted && unsubmitted !== list[list.length - 1]) list.push(unsubmitted);
return list;
}
document.addEventListener('keyup', (ev) => {
if (ev.target.id !== 'prompt-textarea') return;
let input;
const dom = document.querySelector('#prompt-textarea p');
if (ev.code === 'ArrowUp') {
const _his = getHistory();
if (lastIndex === null) lastIndex = _his.length;
if (lastIndex > 0) {
input = _his[--lastIndex];
} else {
return;
}
} else if (ev.code === 'ArrowDown') {
const _his = getHistory();
if (lastIndex === null) lastIndex = _his.length;
if (lastIndex < _his.length - 1) {
input = _his[++lastIndex]
} else {
return;
}
} else{
saveInput();
}
if (input) dom.innerHTML = input;
});
})();