您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A small, modern TO DO list for dang ChatGPT
// ==UserScript== // @name ChatGPT ToDo List // @namespace https://your.namespace.com // @version 0.7 // @description A small, modern TO DO list for dang ChatGPT // @author Emree.el on instagram :) // @match https://chatgpt.com/* // @grant GM_setValue // @grant GM_getValue // @license MIT // ==/UserScript== (function() { 'use strict'; // Adds a funny little checkbox to the top right corner const checkbox = document.createElement('input'); checkbox.type = 'checkbox'; checkbox.style.position = 'fixed'; checkbox.style.top = '10px'; checkbox.style.right = '10px'; document.body.appendChild(checkbox); // Function to show/hide the panel based on checkbox state function togglePanel() { const panel = document.getElementById('custom-panel'); if (checkbox.checked) { panel.style.display = 'block'; } else { panel.style.display = 'none'; } } checkbox.addEventListener('change', togglePanel); // Create the panel... lol const panel = document.createElement('div'); panel.id = 'custom-panel'; panel.style.position = 'fixed'; panel.style.top = '50px'; panel.style.right = '10px'; panel.style.width = '200px'; panel.style.height = '300px'; panel.style.overflowY = 'auto'; // Changed from overflowX to overflowY panel.style.display = 'none'; panel.style.border = '1px solid #171717'; // Set border color panel.style.background = '#171717'; // Set background color document.body.appendChild(panel); // Retrieve stored text from storage function retrieveStoredTexts() { const storedTexts = JSON.parse(GM_getValue('storedTexts', '[]')); const uniqueTexts = new Set(storedTexts); uniqueTexts.forEach(text => { const newText = document.createElement('div'); newText.textContent = text; panel.prepend(newText); const deleteButton = document.createElement('button'); // Moved delete button creation here deleteButton.textContent = 'Delete'; deleteButton.style.marginLeft = '5px'; deleteButton.style.color = 'red'; // Set delete button text color to red deleteButton.addEventListener('click', function() { newText.remove(); storedTexts.splice(storedTexts.indexOf(text), 1); // Remove text from stored texts GM_setValue('storedTexts', JSON.stringify(storedTexts)); // Update stored texts }); newText.appendChild(deleteButton); }); } // Call the function to retrieve stored text retrieveStoredTexts(); // Create text input const textInput = document.createElement('input'); textInput.type = 'text'; textInput.placeholder = 'Enter text'; textInput.style.background = '#212121'; // Set textbox color panel.appendChild(textInput); // Function to add entered text to the panel function addText() { const text = textInput.value.trim(); if (text !== '') { const newText = document.createElement('div'); newText.textContent = text; panel.prepend(newText); const deleteButton = document.createElement('button'); // Moved delete button creation here deleteButton.textContent = 'Delete'; deleteButton.style.marginLeft = '5px'; deleteButton.style.color = 'red'; // Set delete button text color to red deleteButton.addEventListener('click', function() { newText.remove(); storedTexts.splice(storedTexts.indexOf(text), 1); // Remove text from stored texts GM_setValue('storedTexts', JSON.stringify(storedTexts)); // Update stored texts }); newText.appendChild(deleteButton); textInput.value = ''; storeText(text); // Store text } } // Function to store entered text in storage function storeText(text) { let storedTexts = JSON.parse(GM_getValue('storedTexts', '[]')); storedTexts.push(text); // Store text GM_setValue('storedTexts', JSON.stringify(storedTexts.filter(Boolean))); // Update stored texts, filter out empty strings } // Add event listener to the text input to add text textInput.addEventListener('keydown', function(event) { if (event.keyCode === 13) { addText(); } }); })();