您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
save chatpdf dialogs to markdown
// ==UserScript== // @name ChatPDF-Save-To-Markdown // @namespace http://tampermonkey.net/ // @version 0.23 // @description save chatpdf dialogs to markdown // @author Lavapapa // @match https://www.chatpdf.com/ // @icon https://www.google.com/s2/favicons?sz=64&domain=chatpdf.com // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; // what markdown prefix to use for every line of the message. // for example, > for quotes, or - for lists, or # for headers const ai_prefix_every_line = " > " const user_prefix_every_line = "" function truncateString(str) { if (str.length <= 40) { return str; } else { const mid = Math.floor(str.length / 2); const before = str.substr(0, mid); const after = str.substr(mid + 1); return `${before}...${after}`; } } function createSaveButton(){ var button = document.createElement('button'); button.setAttribute('class', 'ant-btn css-1n7nwfa ant-btn-link'); button.setAttribute('style', 'padding-right: 0px;'); button.innerHTML = 'Save'; return button; } function onClick(){ const title = document.querySelector('.ant-card-head-title').textContent.trim(); var chatMessageRows = document.querySelectorAll('.chat-message-row'); var messages = []; for (var i = 0; i < chatMessageRows.length; i++) { var message = chatMessageRows[i].textContent.trim(); if(chatMessageRows[i].classList.contains('ai')){ messages.push(message.replace(/^/gm, ai_prefix_every_line)) } else { messages.push(message.replace(/^/gm, user_prefix_every_line)); } } const mergedText = messages.join('\n\n'); const text = `# ${title}\n\n\`Saved at ${new Date().toLocaleString()}\`\n\n\n${mergedText}`; var filename = "[ChatPDF Save]" + truncateString(title) + '.md'; var blob = new Blob([text], { type: 'text/plain' }); if (window.navigator.msSaveOrOpenBlob) { window.navigator.msSaveBlob(blob, filename); } else { var a = document.createElement('a'); var url = URL.createObjectURL(blob); a.href = url; a.download = filename; document.body.appendChild(a); a.click(); setTimeout(function() { document.body.removeChild(a); window.URL.revokeObjectURL(url); }, 0); } } const button = createSaveButton() button.addEventListener('click', onClick) var antCardExtra = document.querySelector('.ant-card-extra'); antCardExtra.insertBefore(button, antCardExtra.firstChild); })();