🏠 Home 

Copy ChatGPT's all replies

Add a Copy button to the first element with class "ml-1" on https://chat.openai.com to copy content of all elements with class "prose" with basic formatting.


Install this script?
// ==UserScript==
// @name         Copy ChatGPT's all replies
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Add a Copy button to the first element with class "ml-1" on https://chat.openai.com to copy content of all elements with class "prose" with basic formatting.
// @author       You
// @match        https://chat.openai.com/*
// @grant        none
// @license MIT
// ==/UserScript==
(function() {
'use strict';
function getFormattedText(element) {
let r###lt = '';
for (const child of element.childNodes) {
switch (child.nodeType) {
case Node.TEXT_NODE:
r###lt += child.textContent;
break;
case Node.ELEMENT_NODE:
switch (child.tagName) {
case 'BR':
r###lt += '\n';
break;
case 'P':
r###lt += getFormattedText(child) + '\n\n';
break;
case 'OL':
case 'UL':
const items = child.querySelectorAll('li');
if (child.tagName === 'OL') {
items.forEach((item, index) => {
r###lt += `${index + 1}. ${getFormattedText(item)}\n`;
});
} else {
items.forEach(item => {
r###lt += `- ${getFormattedText(item)}\n`;
});
}
r###lt += '\n';
break;
default:
r###lt += getFormattedText(child);
}
}
}
return r###lt;
}
function addCopyButton() {
const ml1Element = document.querySelector('.ml-1');
if (!ml1Element) return;
const copyButton = document.createElement('button');
copyButton.className = 'btn relative btn-neutral border-0 md:border';
copyButton.textContent = 'Copy';
copyButton.addEventListener('click', () => {
const proseElements = document.querySelectorAll('.prose');
let formattedText = '';
for (const proseElement of proseElements) {
formattedText += getFormattedText(proseElement);
}
navigator.clipboard.writeText(formattedText).then(() => {
console.log('Prose content copied to clipboard with basic formatting.');
}).catch(err => {
console.error('Error copying prose content to clipboard:', err);
});
});
ml1Element.appendChild(copyButton);
}
window.addEventListener('load', () => {
setTimeout(addCopyButton, 1000);
});
})();