// ==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 // @downloadURL 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请联系开发者",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 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 "));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