(.*?)<\/p>/gi, '$1\n\n')
.replace(/ Please publish first to open in user mode!
/gi, '\n')
.replace(/(.*?)<\/a>/gi, '[$2]($1)')
.replace(/(.*?)<\/code>/gi, '`$1`');
const parser = new DOMParser();
const doc = parser.parseFromString(markdown, 'text/html');
function countParents(node) {
let depth = 0;
while (node.parentNode) {
node = node.parentNode;
if (node.tagName && (node.tagName.toUpperCase() === 'UL' || node.tagName.toUpperCase() === 'OL')) {
depth++;
}
}
return depth;
}
function processList(element) {
let md = '';
const depth = countParents(element);
let index = element.tagName.toUpperCase() === 'OL' ? 1 : null;
element.childNodes.forEach(node => {
if (node.tagName && node.tagName.toLowerCase() === 'li') {
if (index != null) {
md += ' '.repeat(depth*2) + `${index++}\. ${node.textContent.trim()}\n`;
} else {
md += ' '.repeat(depth*2) + `- ${node.textContent.trim()}\n`;
}
}
});
return md;
}
Array.from(doc.querySelectorAll('ol, ul')).reverse().forEach(list => {
list.outerHTML = processList(list);
});
doc.querySelectorAll("div.chat-uikit-multi-modal-file-image-content").forEach(multifile => {
multifile.innerHTML = multifile.innerHTML.replace(/(.*?)<\/span>/gi, '\n$1');
multifile.innerHTML = `\n\`\`\`file\n${multifile.textContent}\n\`\`\`\n`;
});
doc.querySelectorAll("div[class^=code-block] > div[class^=code-area]").forEach(codearea => {
const header = codearea.querySelector("div[class^=header] > div[class^=text]");
const language = header.textContent;
header.remove();
codearea.outerHTML = `\n\`\`\`${language}\n${codearea.textContent}\n\`\`\`\n`;
});
return (doc.body.innerText || doc.body.textContent) //.replaceAll(":", "\\:");
}
function GetDialogContent() {
const chats = document.querySelectorAll('div[data-scroll-element="scrollable"] div.chat-uikit-message-box-container__message__message-box div.chat-uikit-message-box-container__message__message-box__content');
let markdownContent = '';
Array.from(chats).reverse().forEach(chat => {
const htmlContent = chat.innerHTML;
const chatMarkdown = convertToMarkdown(htmlContent);
const isAsk = chat.querySelector("div.chat-uikit-message-box-inner--primary");
if (isAsk) {
markdownContent += "\n******\n## Ask: \n"+ chatMarkdown + '\n\n';
} else {
markdownContent += "## Anser: \n"+ chatMarkdown + '\n\n';
}
});
return markdownContent;
}
const succ_svg = ``
const svgDataUrl = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(succ_svg);
function CopyDialogContent(){
const mdContent = GetDialogContent();
navigator.clipboard.writeText(mdContent).then(() => {
this.style.cursor = 'url(' + svgDataUrl + '), auto';
setTimeout(() => {
this.style.cursor = 'pointer';
}, 500);
}).catch(err => {
console.error('Could not copy text: ', err);
});
}
function ExportDialogContent() {
let fileContent = GetDialogContent();
let blob = new Blob([fileContent], {type: 'text/plain;charset=utf-8'});
let fileUrl = URL.createObjectURL(blob);
let tempLink = document.createElement('a');
tempLink.href = fileUrl;
let fileTitle = document.title + "_DialogExport.md";
tempLink.setAttribute('download', fileTitle);
tempLink.style.display = 'none';
document.body.appendChild(tempLink);
tempLink.click();
document.body.removeChild(tempLink);
URL.revokeObjectURL(fileUrl);
}
function MDaddBtnLoop() {
if( document.querySelector("#copy_dialog_to_md_button") == null ) {
var lhead = document.querySelector("div[class*=semi-col]:last-child > div[class*=semi-space]") ||
document.querySelector("div.flex.items-center.gap-5.h-6") ||
document.querySelector("div.sidesheet-container > :last-child .semi-sidesheet-body > div > div > div >div > div:last-child> div:last-child")||
document.querySelector("div.sidesheet-container > :last-child > :first-child > :first-child > :first-child > :last-child");
const md_icon = `
`;
if (lhead) {
var btn_cp = document.createElement('button');
lhead.insertBefore(btn_cp, lhead.firstChild);
btn_cp.className ="semi-button semi-button-primary";
btn_cp.id = 'copy_dialog_to_md_button';
btn_cp.onclick = CopyDialogContent;
btn_cp.style = "margin: 0px 5px;";
btn_cp.innerHTML = md_icon + 'Copy';
var btn_dl = document.createElement('button');
lhead.insertBefore(btn_dl, lhead.firstChild);
btn_dl.className ="semi-button semi-button-primary";
btn_dl.id = 'export_dialog_to_md_button';
btn_dl.onclick = ExportDialogContent;
btn_dl.style = "margin: 0px 5px;";
btn_dl.innerHTML = md_icon + 'Export';
setTimeout(MDaddBtnLoop, 5000);
}
}
setTimeout(MDaddBtnLoop, 2000);
}
function CheckPublish() {
if (/bot_id=true.*?space=(\d+)/.test(location.href)) {
let not_exist = document.querySelector("div.semi-empty.semi-empty-vertical");
if (not_exist) {
let warn_info = not_exist.querySelector("div.semi-empty-content > h4");
if (warn_info && !warn_info.querySelector("hr")) {
console.log("warnning=");
warn_info.textContent = warn_info.textContent.replace("not exist", "not exist or need update")
.replace("不存在", "不存在或需要更新发布");
warn_info.innerHTML += "