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();
}
});
})();