Skip to content

Instantly share code, notes, and snippets.

@7shi
Created June 17, 2024 09:56
Show Gist options
  • Save 7shi/acf3cdf8477ec3e567daa7c1ba629127 to your computer and use it in GitHub Desktop.
Save 7shi/acf3cdf8477ec3e567daa7c1ba629127 to your computer and use it in GitHub Desktop.
[JavaScript] patched: claude-export
!async function(){var e="";const{elements:t,title:n}=function(){const e=document.querySelector("div.flex-1.flex.flex-col.gap-3.px-4"),t=document.querySelector("button[data-testid='chat-menu-trigger']"),n=t?t.textContent:"";return{elements:e.querySelectorAll("div.font-claude-message, div.font-user-message"),title:n}}();var a=new Date(new Date(new Date(new Date).toISOString()).getTime()-6e4*(new Date).getTimezoneOffset()).toISOString().slice(0,19).replace("T"," ");e+=`# ${n||"Claude Chat"}\n\`${a}\`\n`;for(var o=0;o<t.length;o++){var i=t[o],r=i;if("DIV"===r.firstChild?.tagName&&(r=r.firstChild,"DIV"===r.firstChild?.tagName&&(r=r.firstChild)),r.firstChild){if(r.nodeType===Node.ELEMENT_NODE){var l=r.childNodes;if(i.classList.contains("font-claude-message")){e+="_Claude_:\n";var d=navigator.clipboard;for(var c of(d._writeText||(d._writeText=navigator.clipboard.writeText),Array.from(i.nextSibling.getElementsByTagName("button")).filter((e=>"Copy"==e.innerText))))await new Promise(((t,n)=>{navigator.clipboard.writeText=async n=>{e+=n.trimEnd()+"\n",t()};try{c.click()}catch(e){n(e)}}));navigator.clipboard.writeText=navigator.clipboard._writeText}else{e+="\n## Prompt:\n\n";for(var s=0;s<l.length;s++){const t=l[s];if(t.nodeType===Node.ELEMENT_NODE){var f=t.tagName,E=t.textContent;if("P"===f&&(e+=`${E}\n`),"OL"===f){var N=0;t.childNodes.forEach((t=>{t.nodeType===Node.ELEMENT_NODE&&"LI"===t.tagName&&(e+=`${++N}. ${t.textContent}\n`)}))}if("UL"===f&&t.childNodes.forEach(((t,n)=>{t.nodeType===Node.ELEMENT_NODE&&"LI"===t.tagName&&(e+=`- ${t.textContent}\n`)})),"PRE"===f){const t=E.split("Copy code"),n=t[0].trim(),a=t[1].trim();e+=`\`\`\`${n}\n${a}\n\`\`\`\n`}if("BLOCKQUOTE"===f)for(const t of E.trim().split("\n"))e+=`> ${t}\n`;if("TABLE"===f){let n="";t.childNodes.forEach((e=>{if(e.nodeType===Node.ELEMENT_NODE&&("THEAD"===e.tagName||"TBODY"===e.tagName)){let t="",a=0;if(e.childNodes.forEach((n=>{if(n.nodeType===Node.ELEMENT_NODE&&"TR"===n.tagName){let o="";n.childNodes.forEach((t=>{t.nodeType!==Node.ELEMENT_NODE||"TD"!==t.tagName&&"TH"!==t.tagName||(o+=`| ${t.textContent} `,"THEAD"===e.tagName&&a++)})),t+=`${o}|\n`}})),n+=t,"THEAD"===e.tagName){const e=`| ${Array(a).fill("---").join(" | ")} |\n`;n+=e}}})),e+=n}e+="\n"}}}}r.nodeType===Node.TEXT_NODE&&(e+="\n")}}(function(e,t,n=""){e.save=function(e){let a="text/plain",o=n?n.trim().toLowerCase().replace(/^[^\w\d]+|[^\w\d]+$/g,"").replace(/[\s\W-]+/g,"-"):"claude";"json"===t.toLowerCase()?(o+=".json",a="text/json","object"==typeof e&&(e=JSON.stringify(e,void 0,4))):"md"===t.toLowerCase()&&(o+=".md");var i=new Blob([e],{type:a}),r=document.createElement("a");r.download=o,r.href=window.URL.createObjectURL(i),r.dataset.downloadurl=[a,r.download,r.href].join(":");var l=new MouseEvent("click",{canBubble:!0,cancelable:!1,view:window,detail:0,screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null});r.dispatchEvent(l)}})(console,"md",n),console.save(e)}();
@7shi
Copy link
Author

7shi commented Jun 17, 2024

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment