// ==UserScript==
// @name 知乎下载器
// @namespace http://howardzhangdqs.eu.org/
// @version 0.1.4
// @description 一键复制知乎文章、回答为Markdown
// @author HowardZhangdqs
// @match *://www.zhihu.com/*
// @match *://zhuanlan.zhihu.com/*
// @license MIT
// @icon https://static.zhihu.com/heifetz/favicon.ico
// @grant none
// ==/UserScript==
/** 更新日志
* 23.10.30: 脚本开写
* 23.10.31:
* feat: 解析渲染表格
* feat: 解析渲染链接
* fix: 加了一个被忘掉的break,但是我忘了是哪忘了加了
* doc: 给types加了完整的注释
* doc: 给Lexer和Parser函数添加完整的注释
*/
(()=>{"use strict";function e(){for(var e="复制为Markdown",t=0,n=Array.from(document.querySelectorAll(".RichText"));t<n.length;t++)!function(t){var n,a,o;t.parentElement.classList.contains("Editable")||t.children[0].classList.contains("zhihucopier-button")||(o=r(t.childNodes),n=c(o),(o=document.createElement("button")).classList.add("zhihucopier-button"),o.innerText=e,o.style.right="0",o.style.top="-2em",o.style.zIndex="999",o.style.width="150px",o.style.height="2em",o.style.backgroundColor="rgba(0,0,0,0.3)",o.style.color="white",o.style.border="white 1px solid",o.style.outline="none",o.style.cursor="pointer",o.style.borderRadius="1em 0 0 1em",o.style.margin="0 0 1em 0",(a=o).style.borderRadius="1em",t.prepend(a),a.addEventListener("click",(function(){try{navigator.clipboard.writeText(n.join("\n\n")),a.innerHTML="复制成功✅",setTimeout((function(){a.innerHTML=e}),1e3)}catch(t){a.innerHTML="发生未知错误<br>请联系开发者",a.style.height="4em",setTimeout((function(){a.style.height="2em",a.innerHTML=e}),1e3)}})))}(n[t])}function t(){i&&(setTimeout(e,1e3),i=!1)}(a=n=n||{})[a.H1=0]="H1",a[a.H2=1]="H2",a[a.Text=2]="Text",a[a.Figure=3]="Figure",a[a.InlineLink=4]="InlineLink",a[a.InlineCode=5]="InlineCode",a[a.InlineMath=6]="InlineMath",a[a.Italic=7]="Italic",a[a.Bold=8]="Bold",a[a.PlainText=9]="PlainText",a[a.UList=10]="UList",a[a.Olist=11]="Olist",a[a.BR=12]="BR",a[a.HR=13]="HR",a[a.Blockquote=14]="Blockquote",a[a.Code=15]="Code",a[a.Link=16]="Link",a[a.Table=17]="Table";var n,a,r=function(e){for(var t=[],a=0;a<e.length;a++){var r=e[a];switch(r.tagName.toLowerCase()){case"h2":t.push({type:n.H1,text:r.textContent,dom:r});break;case"h3":t.push({type:n.H2,text:r.textContent,dom:r});break;case"div":r.classList.contains("highlight")?t.push({type:n.Code,content:r.textContent,language:r.querySelector("pre > code").classList.value.slice(9),dom:r}):r.classList.contains("RichText-LinkCardContainer")&&(c=r.firstChild,t.push({type:n.Link,text:c.getAttribute("data-text"),href:c.href,dom:r}));break;case"blockquote":t.push({type:n.Blockquote,content:o(r),dom:r});break;case"figure":var c=r.querySelector("img").getAttribute("data-actualsrc");c&&t.push({type:n.Figure,src:c,dom:r});break;case"ul":var s=Array.from(r.querySelectorAll("li"));t.push({type:n.UList,content:s.map((function(e){return o(e)})),dom:r});break;case"ol":s=Array.from(r.querySelectorAll("li")),t.push({type:n.Olist,content:s.map((function(e){return o(e)})),dom:r});break;case"p":t.push({type:n.Text,content:o(r),dom:r});break;case"hr":t.push({type:n.HR,dom:r});break;case"table":var i=function(e){for(var t=[],n=0,a=Array.from(e.rows);n<a.length;n++){var r=a[n];r=Array.from(r.cells),t.push(r.map((function(e){return e.textContent.trim()})))}return t}(r);t.push({type:n.Table,content:i,dom:r})}}return t},o=function(e){if("string"==typeof e)return[{type:n.PlainText,text:e}];for(var t=[],a=0,r=Array.from(e.childNodes);a<r.length;a++){var c=r[a];if(c.nodeType==c.TEXT_NODE)t.push({type:n.PlainText,text:c.textContent,dom:c});else{var s=c;switch(s.tagName.toLowerCase()){case"b":t.push({type:n.Bold,content:o(s),dom:s});break;case"i":t.push({type:n.Italic,content:o(s),dom:s});break;case"br":t.push({type:n.BR,dom:s});break;case"code":t.push({type:n.InlineCode,dom:s});break;case"span":s.classList.contains("ztext-math")&&t.push({type:n.InlineMath,content:s.getAttribute("data-tex"),dom:s});break;case"a":t.push({type:n.InlineLink,text:s.textContent,href:s.href,dom:s})}}}return t},c=function(e){for(var t=[],a=0;a<e.length;a++)!function(a){var r=e[a];switch(r.type){case n.Figure:t.push(""));break;case n.Code:t.push("```".concat(r.language||"","\n").concat(r.content,"```"));break;case n.UList:t.push(r.content.map((function(e){return"- ".concat(s(e))})).join("\n"));break;case n.Olist:t.push(r.content.map((function(e,t){return"".concat(t+1,". ").concat(s(e))})).join("\n"));break;case n.H1:t.push("# ".concat(r.text));break;case n.H2:t.push("## ".concat(r.text));break;case n.Blockquote:t.push(s(r.content,"> "));break;case n.Text:t.push(s(r.content));break;case n.HR:t.push("\n---\n");break;case n.Link:t.push("[".concat(r.text,"](").concat(r.href,")"));break;case n.Table:var o,c=r.content,i=c[0].length,l=new Array(i).fill(0),u=[];for(o in c)for(var h in c[o])l[h]=Math.max(l[h],c[o][h].length);var p=function(e){for(var t="",n=0;n<i;n++)t+="| ".concat(e[n].padEnd(l[n])," ");return t+"|"};u.push(p(c[0])),u.push(function(){for(var e="",t=0;t<i;t++)e+="| ".concat("-".repeat(l[t])," ");return e+"|"}());for(var d=1;d<c.length;d++)u.push(p(c[d]));t.push(u.join("\n"))}}(a);return t},s=function(e,t){void 0===t&&(t="");for(var a="",r=0,o=e;r<o.length;r++){var c=o[r];switch(c.type){case n.Bold:a+="**".concat(s(c.content),"**");break;case n.Italic:a+="*".concat(s(c.content),"*");break;case n.InlineLink:a+="[".concat(c.text,"](").concat(c.href,")");break;case n.PlainText:a+=c.text;break;case n.BR:a+="\n"+t;break;case n.InlineCode:a+="`".concat(c.content,"`");break;case n.InlineMath:a+="$".concat(c.content,"$")}}return t+a},i=!0;document.addEventListener("scroll",(function(){i=!0})),setInterval(t,1e3),setTimeout(t,100)})();