// ==UserScript== // @name 知乎备份剪藏 // @namespace qtqz // @source https://github.com/qtqz/zhihu-backup-collect // @version 0.8.18 // @description 将你喜欢的知乎回答/文章/想法保存为 markdown / zip / png // @author qtqz // @match https://www.zhihu.com/follow // @match https://www.zhihu.com/pin/* // @match https://www.zhihu.com/people/* // @match https://www.zhihu.com/org/* // @match https://www.zhihu.com/question/* // @match https://www.zhihu.com/answer/* // @match https://www.zhihu.com/collection/* // @match https://zhuanlan.zhihu.com/p/* // @match https://www.zhihu.com/search*content* // @match https://www.zhihu.com/ // @license MIT // @icon https://static.zhihu.com/heifetz/favicon.ico // @grant none // @downloadURL none // ==/UserScript== /** ## Changelog * 24.3.27(0.8.18): - 保存失败时给予补救机会 - 修复按钮被目录遮挡无法点击 - 修复无法保存机构号主页内容 - 修复 url 获取错误 - 内容子标题从 h2 开始 - 解析参考文献 - 解析目录 * 24.3.20(0.8.8): - 修复无法保存匿名用户的内容 - 增加保存失败原因提示 * 24.3.4(0.8.7): - 更方便的测试 - 解析评论为Markdown - 评论图片本地化 - 完善解析评论修复bug - 修复zip内文件日期错误问题 - 修复无法下载视频问题 - 适配推荐页、搜索结果页 - info中添加ip属地(如果有) - 修复想法无法保存图片 * 24.2.29(0.7.10): - 备注改为最长60字 - 修复个人页无法保存想法问题 - 修复保存zip处理评论可能出错问题 * 24.2.4(0.7.7): - 为Markdown添加frontmatter - 修正下载md内的图片路径为本地路径 - 对于有目录的内容,减轻按钮与目录的重叠 * 24.1.19(0.7.4): - 截图适配专栏 * 24.1.13(0.7.x): - 粗略解析评论并添加到zip - 修复大量bug - 准备发布 * 24.1.13(0.6.x): - 适配想法中的复杂情形 * 24.1.11(0.5.x): - 添加截图功能 - 初步适配想法 * 24.1.2(0.4.x): - 初步重制 * 23.12.29: - 立项 */ /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ 227: /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(a,b){if(true)!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (b), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else {}})(this,function(){"use strict";function b(a,b){return"undefined"==typeof b?b={autoBom:!1}:"object"!=typeof b&&(console.warn("Deprecated: Expected third argument to be a object"),b={autoBom:!b}),b.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open("GET",a),d.responseType="blob",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error("could not download file")},d.send()}function d(a){var b=new XMLHttpRequest;b.open("HEAD",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent("click"))}catch(c){var b=document.createEvent("MouseEvents");b.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof __webpack_require__.g&&__webpack_require__.g.global===__webpack_require__.g?__webpack_require__.g:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||("object"!=typeof window||window!==f?function(){}:"download"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement("a");g=g||b.name||"download",j.download=g,j.rel="noopener","string"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target="_blank")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:"msSaveOrOpenBlob"in navigator?function(f,g,h){if(g=g||f.name||"download","string"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement("a");i.href=f,i.target="_blank",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open("","_blank"),g&&(g.document.title=g.document.body.innerText="downloading..."),"string"==typeof b)return c(b,d,e);var h="application/octet-stream"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\/[\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&"undefined"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,"data:attachment/file;"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g, true&&(module.exports=g)}); //# sourceMappingURL=FileSaver.min.js.map /***/ }), /***/ 210: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { /*! JSZip v3.10.1 - A JavaScript class for generating and reading zip files (c) 2009-2016 Stuart Knightley Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. JSZip uses the library pako released under the MIT license : https://github.com/nodeca/pako/blob/main/LICENSE */ !function(e){if(true)module.exports=e();else {}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=undefined;if(!e&&t)return require(r,!0);if(l)return l(r,!0);var n=new Error("Cannot find module '"+r+"'");throw n.code="MODULE_NOT_FOUND",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=undefined,e=0;e>2,s=(3&t)<<4|r>>4,a=1>6:64,o=2>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{"./support":30,"./utils":32}],2:[function(e,t,r){"use strict";var n=e("./external"),i=e("./stream/DataWorker"),s=e("./stream/Crc32Probe"),a=e("./stream/DataLengthProbe");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")),t=this;return e.on("end",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a("uncompressedSize")).pipe(t.compressWorker(r)).pipe(new a("compressedSize")).withStreamInfo("compression",t)},t.exports=o},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(e,t,r){"use strict";var n=e("./stream/GenericWorker");r.STORE={magic:"\0\0",compressWorker:function(){return new n("STORE compression")},uncompressWorker:function(){return new n("STORE decompression")}},r.DEFLATE=e("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(e,t,r){"use strict";var n=e("./utils");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?"string"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{"./utils":32}],5:[function(e,t,r){"use strict";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){"use strict";var n=null;n="undefined"!=typeof Promise?Promise:e("lie"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,i=e("pako"),s=e("./utils"),a=e("./stream/GenericWorker"),o=n?"uint8array":"array";function h(e,t){a.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic="\b\0",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h("Deflate",e)},r.uncompressWorker=function(){return new h("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(e,t,r){"use strict";function A(e,t){var r,n="";for(r=0;r>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo("string",s(h.name)),c=I.transformTo("string",O.utf8encode(h.name)),d=h.comment,p=I.transformTo("string",s(d)),m=I.transformTo("string",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b="",v="",y="",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),"UNIX"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getHours(),a<<=6,a|=k.getMinutes(),a<<=5,a|=k.getSeconds()/2,o=k.getFullYear()-1980,o<<=4,o|=k.getMonth()+1,o<<=5,o|=k.getDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+="up"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+="uc"+A(y.length,2)+y);var E="";return E+="\n\0",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+"\0\0\0\0"+A(z,4)+A(n,4)+f+b+p}}var I=e("../utils"),i=e("../stream/GenericWorker"),O=e("../utf8"),B=e("../crc32"),R=e("../signature");function s(e,t,r,n){i.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo("string",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1)}},t.exports=i},{"../utils":32}],19:[function(e,t,r){"use strict";var n=e("./Uint8ArrayReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(e,t,r){"use strict";var n=e("./DataReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./DataReader":18}],21:[function(e,t,r){"use strict";var n=e("./ArrayReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./ArrayReader":17}],22:[function(e,t,r){"use strict";var n=e("../utils"),i=e("../support"),s=e("./ArrayReader"),a=e("./StringReader"),o=e("./NodeBufferReader"),h=e("./Uint8ArrayReader");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),"string"!==t||i.uint8array?"nodebuffer"===t?new o(e):i.uint8array?new h(n.transformTo("uint8array",e)):new s(n.transformTo("array",e)):new a(e)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(e,t,r){"use strict";r.LOCAL_FILE_HEADER="PK",r.CENTRAL_FILE_HEADER="PK",r.CENTRAL_DIRECTORY_END="PK",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",r.ZIP64_CENTRAL_DIRECTORY_END="PK",r.DATA_DESCRIPTOR="PK\b"},{}],24:[function(e,t,r){"use strict";var n=e("./GenericWorker"),i=e("../utils");function s(e){n.call(this,"ConvertWorker to "+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{"../utils":32,"./GenericWorker":28}],25:[function(e,t,r){"use strict";var n=e("./GenericWorker"),i=e("../crc32");function s(){n.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}e("../utils").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(e,t,r){"use strict";var n=e("../utils"),i=e("./GenericWorker");function s(e){i.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{"../utils":32,"./GenericWorker":28}],27:[function(e,t,r){"use strict";var n=e("../utils"),i=e("./GenericWorker");function s(e){i.call(this,"DataWorker");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,t);break;case"uint8array":e=this.data.subarray(this.index,t);break;case"array":case"nodebuffer":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{"../utils":32,"./GenericWorker":28}],28:[function(e,t,r){"use strict";function n(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit("data",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit("error",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r "+e:e}},t.exports=n},{}],29:[function(e,t,r){"use strict";var h=e("../utils"),i=e("./ConvertWorker"),s=e("./GenericWorker"),u=e("../base64"),n=e("../support"),a=e("../external"),o=null;if(n.nodestream)try{o=e("../nodejs/NodejsStreamOutputAdapter")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on("data",function(e,t){n.push(e),o&&o(t)}).on("error",function(e){n=[],r(e)}).on("end",function(){try{var e=function(e,t,r){switch(e){case"blob":return h.newBlob(h.transformTo("arraybuffer",t),r);case"base64":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo("nodebuffer",e).toString("utf-8"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?"uint8array":"array",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?"uint8array":"array",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(e,t,a){"use strict";var o=e("./support"),h=e("./base64"),r=e("./nodejsUtils"),u=e("./external");function n(e){return e}function l(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{"./common":41}],43:[function(e,t,r){"use strict";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){"use strict";var h,c=e("../utils/common"),u=e("./trees"),d=e("./adler32"),p=e("./crc32"),n=e("./messages"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&sh&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<>>=y,p-=y),p<15&&(d+=z[n++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<>>=y,p-=y,(y=s-a)>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg="incorrect header check",r.mode=30;break}if(8!=(15&u)){e.msg="unknown compression method",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg="invalid window size",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l>>=_,l-=_,0===r.have){e.msg="invalid bit length repeat",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l>>=_)),u>>>=3,l-=3}else{for(z=_+7;l>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg="invalid literal/length code",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg="invalid distance code",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(hd?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{"../utils/common":41}],53:[function(e,t,r){"use strict";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){"use strict";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i="[object process]"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage("","*"),r.onmessage=t,e}}()?(a="setImmediate$"+Math.random()+"$",r.addEventListener?r.addEventListener("message",d,!1):r.attachEvent("onmessage",d),function(e){r.postMessage(a+e,"*")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&"onreadystatechange"in l.createElement("script")?(s=l.documentElement,function(e){var t=l.createElement("script");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),r=0;r { /******/ __webpack_require__.g = (function() { /******/ if (typeof globalThis === 'object') return globalThis; /******/ try { /******/ return this || new Function('return this')(); /******/ } catch (e) { /******/ if (typeof window === 'object') return window; /******/ } /******/ })(); /******/ })(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be in strict mode. (() => { "use strict"; // EXTERNAL MODULE: ./node_modules/.pnpm/file-saver@2.0.5/node_modules/file-saver/dist/FileSaver.min.js var FileSaver_min = __webpack_require__(227); ;// CONCATENATED MODULE: ./src/core/utils.ts var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (undefined && undefined.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; /** * Converts a Zhihu link to a normal link. * @param link - The Zhihu link to convert. * @returns The converted normal link. */ var ZhihuLink2NormalLink = function (link) { var url = new URL(link); if (url.hostname == "link.zhihu.com") { var target = new URLSearchParams(url.search).get("target"); return decodeURIComponent(target); } else { if (link.match(/#/)) return '#' + link.split('#')[1]; else return link; } }; /** * Get the parent dom with the class name. * @param dom - The dom to get parent. * @param className - The class name of the parent. * @returns The parent dom.Maybe it's itself. */ var getParent = function (dom, className) { if (dom == null) return false; if (dom.classList.contains(className)) return dom; else return getParent(dom.parentElement, className); }; /** * Get the title of the dom. * @param dom - The dom to get title. * @returns The title of the dom. */ var getTitle = function (dom, scene, type) { var t; if (scene == "follow" || scene == "people" || scene == "collection" || scene == "pin") { if (type == "answer" || type == "article") { t = getParent(dom, "ContentItem").querySelector("h2.ContentItem-title a").innerText; } else { //想法 t = "想法:" + dom.innerText.slice(0, 24).trim().replace(/\s/g, ""); } } //问题/回答 else if (scene == "question" || scene == "answer") { t = getParent(dom, "QuestionPage").querySelector("meta[itemprop=name]").content; } //文章 else if (scene == "article") { t = getParent(dom, "Post-Main").querySelector("h1.Post-Title").innerText; } else t = "无标题"; //替换英文问号为中文问号,因标题中间也可能有问号所以不去掉 return t.replace(/\?/g, "?").replace(/\/|\\|<|>|"|\*|\?|\||\:/g, "-"); }; /** * Get the author of the dom. * @param dom - The dom to get author. * @returns The author of the dom. */ var getAuthor = function (dom, scene, type) { var author_dom; //寻找包含昵称+链接+签名的节点 if (scene == "follow") { var p = getParent(dom, "ContentItem"); //唯独关注页作者在ContentItem外面,原创内容没有作者栏 author_dom = p.querySelector(".AuthorInfo-content") || getParent(dom, "Feed").querySelector(".FeedSource .AuthorInfo-content") || getParent(dom, "Feed").querySelector(".FeedSource-firstline"); } ///个人/问题/回答/想法/收藏夹 else if (scene == "people" || scene == "question" || scene == "answer" || scene == "pin" || scene == "collection") { var p = getParent(dom, "ContentItem"); author_dom = p.querySelector(".AuthorInfo-content"); } //文章 else if (scene == "article") { author_dom = getParent(dom, "Post-Main").querySelector(".Post-Author"); } if (author_dom) { var authorName_dom = author_dom.querySelector(".AuthorInfo-name .UserLink-link") || author_dom.querySelector(".UserLink-link") || author_dom.querySelector(".UserLink.AuthorInfo-name"); //匿名用户 var authorBadge_dom = author_dom.querySelector(".AuthorInfo-badge"); //console.log("authorName_dom", authorName_dom) return { name: authorName_dom.innerText || authorName_dom.children[0].getAttribute("alt"), url: authorName_dom.href, badge: authorBadge_dom ? authorBadge_dom.innerText : "" }; } else console.error("未找到author_dom"); }; /** * Get the URL of the dom. * 应该按每个内容获取URL,而非目前网址 * @param dom - The dom to get URL. * @returns The URL of the dom. */ var getURL = function (dom, scene, type) { var url; //文章/想法/回答 if (scene == "article" || scene == "pin" || scene == "answer") { url = window.location.href; var q = url.match(/\?/) ? url.match(/\?/).index : 0; if (q) url = url.slice(0, q); return url; } //关注/个人/问题/等 // if (scene == "follow" || scene == "people" || scene == "question") else { if (type == "answer" || type == "article") { var p = getParent(dom, "ContentItem"); url = p.querySelector(".ContentItem>meta[itemprop=url]").content; if (url.slice(0, 5) != "https") url = "https:" + url; return url; } //pin else { var zopdata = getParent(dom, "ContentItem").getAttribute("data-zop"); return "https://www.zhihu.com/pin/" + JSON.parse(zopdata).itemId; } } }; /** * * 时间: * 使用内容下显示的时间 * */ var getTime = function (dom, scene, type) { return __awaiter(void 0, void 0, Promise, function () { var created, modified, time_dom; return __generator(this, function (_a) { switch (_a.label) { case 0: if (!(scene != "article")) return [3 /*break*/, 1]; time_dom = getParent(dom, "ContentItem").querySelector(".ContentItem-time"); created = time_dom.querySelector("span").getAttribute("data-tooltip").slice(4); //2023-12-30 16:12 modified = time_dom.querySelector("span").innerText.slice(4); return [2 /*return*/, { created: created, modified: modified }]; case 1: time_dom = getParent(dom, "Post-content").querySelector(".ContentItem-time"); modified = time_dom.childNodes[0].textContent.slice(4); time_dom.click(); return [4 /*yield*/, new Promise(function (resolve) { setTimeout(function () { resolve(); }, 1000); })]; case 2: _a.sent(); created = time_dom.childNodes[0].textContent.slice(4); time_dom.click(); return [2 /*return*/, { created: created, modified: modified }]; } }); }); }; var getUpvote = function (dom, scene, type) { //关注/个人/问题/回答页 //if (scene == "follow" || scene == "people" || scene == "question" || scene == "answer") {//收藏夹 //up_dom = (getParent(dom, "ContentItem") as HTMLElement).querySelector(".VoteButton--up") as HTMLElement//\n赞同 5.6 万 var upvote, up_dom; if (type == "pin") { //个人页的想法有2层ContentItem-actions,想法页有1层 up_dom = getParent(dom, "ContentItem").querySelector(".ContentItem-actions>.ContentItem-actions") || getParent(dom, "ContentItem").querySelector(".ContentItem-actions"); up_dom = up_dom.childNodes[0]; upvote = up_dom.textContent.replace(/,|\u200B/g, '').slice(0, -4); upvote ? 0 : upvote = 0; } else if (scene == "article") { up_dom = getParent(dom, "Post-content").querySelector(".VoteButton--up"); upvote = up_dom.textContent.replace(/,|\u200B/g, '').slice(3); upvote ? 0 : upvote = 0; } else { var zaedata = getParent(dom, "ContentItem").getAttribute("data-za-extra-module"); upvote = JSON.parse(zaedata).card.content.upvote_num; } return parseInt(upvote); // } //} }; var getCommentNum = function (dom, scene, type) { //关注/个人/问题/回答页 //if (scene == "follow" || scene == "people" || scene == "question" || scene == "answer") {//收藏夹 var cm, cm_dom; if (type == "pin") { cm_dom = getParent(dom, "ContentItem").querySelector(".ContentItem-actions>.ContentItem-actions") || getParent(dom, "ContentItem").querySelector(".ContentItem-actions"); cm_dom = cm_dom.childNodes[1]; cm = cm_dom.textContent.replace(/,|\u200B/g, "").slice(0, -4); cm ? 0 : cm = 0; } else if (scene == "article") { cm_dom = getParent(dom, "Post-content").querySelector(".BottomActions-CommentBtn"); cm = cm_dom.textContent.replace(/,|\u200B/g, '').slice(0, -4); cm ? 0 : cm = 0; } else { var zaedata = getParent(dom, "ContentItem").getAttribute("data-za-extra-module"); cm = JSON.parse(zaedata).card.content.comment_num; } return parseInt(cm); // } //} }; var getRemark = function (dom) { var remark, p = getParent(dom, "ContentItem"); //文章页没有,remark = remark.replace(/\/|\\|<|>|"|\*|\?|\||\:/g, "-") if (!p) p = getParent(dom, "PinItem"); if (!p) p = getParent(dom, "Post-content"); if (p) remark = p.querySelector("input.to-remark").value.replace(/\s/g, "-"); if (remark.match(/\/|\\|<|>|"|\*|\?|\||\:/g)) return "非法备注"; return remark; }; /** * 获取是否需要保存评论,用于截图,后续用于PDF,zip */ var getCommentSwitch = function (dom) { var s, p = getParent(dom, "ContentItem"); if (!p) p = getParent(dom, "PinItem"); if (!p) p = getParent(dom, "Post-content"); if (p) s = p.querySelector("input#to-cm").checked; return s; }; ;// CONCATENATED MODULE: ./src/core/tokenTypes.ts /** * Enum representing the different types of tokens in the parsed markdown. */ var TokenType; (function (TokenType) { TokenType[TokenType["H2"] = 0] = "H2"; TokenType[TokenType["H3"] = 1] = "H3"; TokenType[TokenType["Text"] = 2] = "Text"; TokenType[TokenType["Figure"] = 3] = "Figure"; TokenType[TokenType["Gif"] = 4] = "Gif"; TokenType[TokenType["InlineLink"] = 5] = "InlineLink"; TokenType[TokenType["InlineCode"] = 6] = "InlineCode"; TokenType[TokenType["Math"] = 7] = "Math"; TokenType[TokenType["Italic"] = 8] = "Italic"; TokenType[TokenType["Bold"] = 9] = "Bold"; TokenType[TokenType["PlainText"] = 10] = "PlainText"; TokenType[TokenType["UList"] = 11] = "UList"; TokenType[TokenType["Olist"] = 12] = "Olist"; TokenType[TokenType["BR"] = 13] = "BR"; TokenType[TokenType["HR"] = 14] = "HR"; TokenType[TokenType["Blockquote"] = 15] = "Blockquote"; TokenType[TokenType["Code"] = 16] = "Code"; TokenType[TokenType["Link"] = 17] = "Link"; TokenType[TokenType["Table"] = 18] = "Table"; TokenType[TokenType["Video"] = 19] = "Video"; TokenType[TokenType["Comment"] = 20] = "Comment"; TokenType[TokenType["CommentReply"] = 21] = "CommentReply"; })(TokenType || (TokenType = {})); ;// CONCATENATED MODULE: ./src/core/lexer.ts /** * Tokenizes a NodeListOf and returns an array of LexType tokens. * @param input - The NodeListOf to tokenize. * @returns An array of LexType tokens. */ var lexer = function (input, type) { /** * 想法,文字没有节点,非#标签和非@链接被
隔开,是单独的一行 * 将每一段转为p段落处理 */ if (type == "pin") { //console.log(input) var pinParagraphs = []; //二级包-一级 var dom = input[0].parentNode; //RichText //被转发的想法,首行添加主人 if (getParent(dom, "PinItem-content-originpin")) { var p = document.createElement("p"); p.innerHTML = getParent(dom, "PinItem-content-originpin").firstElementChild.textContent; pinParagraphs.push({ type: TokenType.Text, content: Tokenize(p), }); } var blocks = dom.innerHTML.replace(/\n\s*/g, "").split(//g); for (var _i = 0, blocks_1 = blocks; _i < blocks_1.length; _i++) { var block = blocks_1[_i]; var p = document.createElement("p"); p.innerHTML = block; pinParagraphs.push({ type: TokenType.Text, content: Tokenize(p), }); } //检查想法有无引用回答,仅检查当前层级 if (getParent(dom, "PinItem-content-originpin")) { var a = getParent(dom, "PinItem-content-originpin").querySelector("a.LinkCard"); if (a) { var p = document.createElement("p"); var a2 = document.createElement("a"); a2.href = a.href; a2.innerHTML = a.innerText.replace(/\n\s*/g, " "); p.innerHTML = a2.outerHTML; pinParagraphs.push({ type: TokenType.Text, content: Tokenize(p), }); } } else { //此时dom不在源想法内 var parent = getParent(dom, "PinItem"); if (!parent.querySelector(".PinItem-content-originpin") && parent.querySelector("a.LinkCard")) { var a = parent.querySelector("a.LinkCard"); var p = document.createElement("p"); var a2 = document.createElement("a"); a2.href = a.href; a2.innerHTML = a.innerText.replace(/\n\s*/g, " "); p.innerHTML = a2.outerHTML; pinParagraphs.push({ type: TokenType.Text, content: Tokenize(p), }); } } //console.log('pinParagraphs', pinParagraphs) return pinParagraphs; } var tokens = []; for (var i = 0; i < input.length; i++) { var node = input[i]; //console.log(node) var tagName = node.nodeName.toLowerCase(); switch (tagName) { case "h2": { tokens.push({ type: TokenType.H2, text: node.textContent, dom: node }); break; } case "h3": { tokens.push({ type: TokenType.H3, text: node.textContent, dom: node }); break; } case "div": { if (node.classList.contains("highlight")) { tokens.push({ type: TokenType.Code, content: node.textContent, language: node.querySelector("pre > code").classList.value.slice(9), dom: node }); } else if (node.classList.contains("RichText-LinkCardContainer")) { var link = node.firstChild; tokens.push({ type: TokenType.Link, text: link.getAttribute("data-text"), href: ZhihuLink2NormalLink(link.href), dom: node }); } else if (node.querySelector("video")) { tokens.push({ type: TokenType.Video, src: node.querySelector("video").getAttribute("src"), local: false, dom: node }); } else if (node.classList.contains("RichText-ADLinkCardContainer")) { tokens.push({ type: TokenType.Text, content: [{ type: TokenType.PlainText, text: node.textContent }], dom: node }); } break; } case "blockquote": { tokens.push({ type: TokenType.Blockquote, content: Tokenize(node), dom: node }); break; } case "figure": { var img = node.querySelector("img"); if (img.classList.contains("ztext-gif")) { var guessSrc = function (src) { return src.replace(/\..{3,4}$/g, ".gif"); }; var src = guessSrc(img.getAttribute("src") || img.getAttribute("data-thumbnail")); if (src) { tokens.push({ type: TokenType.Gif, src: src, local: false, dom: node }); } } else { var src = img.getAttribute("data-actualsrc") || img.getAttribute("data-original"); if (src) { tokens.push({ type: TokenType.Figure, src: src, local: false, dom: node }); } } break; } case "ul": { var childNodes = Array.from(node.querySelectorAll("li")); tokens.push({ type: TokenType.UList, content: childNodes.map(function (el) { return Tokenize(el); }), dom: node, }); break; } case "ol": { var childNodes = Array.from(node.querySelectorAll("li")); tokens.push({ type: TokenType.Olist, content: childNodes.map(function (el) { return Tokenize(el); }), dom: node, }); break; } case "p": { tokens.push({ type: TokenType.Text, content: Tokenize(node), dom: node }); break; } case "hr": { tokens.push({ type: TokenType.HR, dom: node }); break; } case "table": { var el = node; var table2array = function (table) { var res = []; var rows = Array.from(table.rows); for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) { var row = rows_1[_i]; var cells = Array.from(row.cells); res.push(cells.map(function (cell) { return cell.innerHTML.replace(/(.*?).*?<\/svg><\/a>/gms, "$1").replace(/(.*?)<\/span>/gms, "$1"); })); } return res; }; var table = table2array(el); tokens.push({ type: TokenType.Table, content: table, dom: node, }); break; } } } //console.log(tokens); return tokens; }; /** * 解析评论的入口 * @param input 子级们应为评论序列,嵌套子评论 * @param type 暂未使用 * @returns 评论的数组,和评论带的图的数组 */ var lexerComment = function (input, type) { var tokens = []; commentImg = []; for (var i = 0; i < input.length; i++) { var node = input[i]; //console.log(node) if (node.getAttribute('data-id')) { tokens.push({ type: TokenType.Comment, content: getCommentReplys(node), dom: node, }); } } console.log(commentImg); return [tokens, commentImg]; }; var commentImg = []; /** * 解析具体每一条评论元素(带id号),不嵌套子评论 * @param node 带id号元素 * @returns 评论信息 */ var getCommentReplys = function (node) { var res = []; var nodes = node.childNodes; //顶层id号评论的下层 for (var i = 0; i < nodes.length; i++) { var reply = nodes[i]; var tgt = void 0; if (reply.tagName == 'BUTTON') res.push({ type: TokenType.CommentReply, level: 2, content: reply.textContent }); else if (!reply.getAttribute('data-id')) { tgt = reply; res.push(getCommentReplyInfo(tgt, 1)); } else { tgt = reply.childNodes[0]; res.push(getCommentReplyInfo(tgt, 2)); } } return res; }; /** * 获取每条评论信息 * @param reply 包含3行信息的元素 * @param level 深度 * @returns 评论信息对象 */ var getCommentReplyInfo = function (reply, level) { //console.log(reply) var name = ''; reply.childNodes[1].childNodes[0].querySelectorAll('a').forEach(function (e, i) { i ? name += ' › ' : 0; name += e.textContent; }); var textContent = reply.childNodes[1].childNodes[1]; var textContents = textContent.childNodes; var picture = ''; if (textContent.querySelector('.comment_img')) { picture = textContent.querySelector('.comment_img>img').getAttribute('data-original'); } var textContentPlain = ''; textContents.forEach(function (e) { if (e.nodeName == 'IMG') textContentPlain += e.alt; else if (e.nodeName == 'A') { var link = ZhihuLink2NormalLink(e.href); textContentPlain += '[' + link + '](' + link + ')'; } else if (e.nodeName == 'BR') textContentPlain += '\n'; else textContentPlain += e.textContent; if (picture) { textContentPlain += '![图片]' + '(./assets/' + picture.replace(/\?.*?$/g, "").split("/").pop() + ')'; commentImg.push(picture); } }); //多行评论 if (textContentPlain.match('\n')) { textContentPlain = textContentPlain.split('\n'); } var info = reply.childNodes[1].childNodes[2]; var time = info.childNodes[0].childNodes[0].childNodes[0].textContent; var location = ''; try { location = info.childNodes[0].childNodes[0].childNodes[2].textContent.replace('IP 属地', ''); } catch (e) { console.error('location', e); } var likes = info.childNodes[1].childNodes[1].textContent.replace('喜欢', '0').match(/\d+/)[0]; return { type: TokenType.CommentReply, level: level, content: { name: name, text: textContentPlain, likes: parseInt(likes), time: time, location: location } }; }; /** * Tokenizes an HTML element or string into an array of TokenTextType objects. * 处理行内内容 * @param node The HTML element or string to tokenize. * @returns An array of TokenTextType objects representing the tokenized input. */ var Tokenize = function (node) { if (typeof node == "string") { return [{ type: TokenType.PlainText, text: node, }]; } var childs = Array.from(node.childNodes); var res = []; // 处理

的奇观 try { if (childs.length == 1 && childs[0].tagName.toLowerCase() == "p") { childs = Array.from(childs[0].childNodes); } } catch (_a) { } for (var _i = 0, childs_1 = childs; _i < childs_1.length; _i++) { var child = childs_1[_i]; if (child.nodeType == child.TEXT_NODE) { res.push({ type: TokenType.PlainText, text: child.textContent.replace(/\u200B/g, ''), dom: child, }); } else { var el = child; switch (el.tagName.toLowerCase()) { case "b": { res.push({ type: TokenType.Bold, content: Tokenize(el), dom: el, }); break; } case "i": { res.push({ type: TokenType.Italic, content: Tokenize(el), dom: el, }); break; } case "br": { res.push({ type: TokenType.BR, dom: el, }); break; } case "code": { res.push({ type: TokenType.InlineCode, content: el.innerText, dom: el, }); break; } case "span": { try { if (el.classList.contains("ztext-math")) { res.push({ type: TokenType.Math, content: el.getAttribute("data-tex"), dom: el, }); } else if (el.children[0].classList.contains("RichContent-EntityWord")) { //搜索词 res.push({ type: TokenType.PlainText, text: el.innerText, dom: el, }); } else if (el.children[0].classList.contains("UserLink")) { //想法中的@ res.push({ type: TokenType.InlineLink, text: el.innerText, href: ZhihuLink2NormalLink(el.querySelector("a").href), dom: el, }); } } catch (e) { res.push({ type: TokenType.PlainText, text: el.innerText, dom: el, }); //console.error(el, el.innerText) } break; } case "a": { //console.log(el) res.push({ type: TokenType.InlineLink, text: el.textContent, href: ZhihuLink2NormalLink(el.href), dom: el, }); break; } case "sup": { //参考文献引用 res.push({ type: TokenType.InlineLink, text: el.firstElementChild.textContent, href: ZhihuLink2NormalLink(el.firstElementChild.href), dom: el.firstElementChild, }); break; } } } } return res; }; ;// CONCATENATED MODULE: ./src/core/parser.ts /** * * @param input 每条顶级评论的数组 * @returns 1行1项,无需\n连接 */ var parserComment = function (input) { var output = []; var h3 = '### '; var h4 = '#### '; for (var i = 0; i < input.length; i++) { var replys = input[i].content; var _loop_1 = function (i_1) { var reply = replys[i_1]; var pre = ''; if (reply.level == 2) pre = '> '; if (typeof reply.content != 'string') { if (reply.level == 1) output.push(pre + h3 + reply.content.name); else output.push(pre + h4 + reply.content.name); if (typeof reply.content.text == 'object') { reply.content.text.forEach(function (e) { output.push(pre + e); }); } else output.push(pre + reply.content.text); output.push(pre + reply.content.time + ' ' + reply.content.location + ' ' + reply.content.likes + ' 赞'); } else output.push(pre + reply.content); }; for (var i_1 = 0; i_1 < replys.length; i_1++) { _loop_1(i_1); } } var newOutput = output.flatMap(function (e) { if (e.slice(0, 2) == '> ') return [e, '\n', '> ', '\n']; else return [e, '\n', '\n']; }); //console.log(output,newOutput) return newOutput; }; /** * Parses an array of LexType objects and returns an array of strings representing the parsed output. * @param input An array of LexType objects to be parsed. * @returns An array of strings representing the parsed output. */ var parser = function (input) { var output = []; var _loop_2 = function (i) { var token = input[i]; switch (token.type) { case TokenType.Code: { output.push("```".concat(token.language ? token.language : "", "\n").concat(token.content).concat(token.content.endsWith("\n") ? "" : "\n", "```")); break; } ; case TokenType.UList: { output.push(token.content.map(function (item) { return "- ".concat(renderRich(item)); }).join("\n")); break; } ; case TokenType.Olist: { output.push(token.content.map(function (item, index) { return "".concat(index + 1, ". ").concat(renderRich(item)); }).join("\n")); break; } ; case TokenType.H2: { output.push("## ".concat(token.text)); break; } ; case TokenType.H3: { output.push("### ".concat(token.text)); break; } ; case TokenType.Blockquote: { output.push(renderRich(token.content, "> ")); break; } ; case TokenType.Text: { output.push(renderRich(token.content)); break; } ; case TokenType.HR: { output.push("\n---\n"); break; } ; case TokenType.Link: { output.push("[".concat(token.text, "](").concat(token.href, ")")); break; } ; case TokenType.Figure: { output.push("![](".concat(token.local ? token.localSrc : token.src, ")")); break; } ; case TokenType.Gif: { output.push("![](".concat(token.local ? token.localSrc : token.src, ")")); break; } ; case TokenType.Video: { // 创建一个虚拟的 DOM 节点 var dom = document.createElement("video"); dom.setAttribute("src", token.local ? token.localSrc : token.src); if (!token.local) dom.setAttribute("data-info", "文件还未下载,随时可能失效,请使用`下载全文为Zip`将视频一同下载下来"); output.push(dom.outerHTML); break; } ; case TokenType.Table: { //console.log(token); var rows = token.content; var cols_1 = rows[0].length; var widths_1 = new Array(cols_1).fill(0); var res = []; for (var i_2 in rows) { for (var j in rows[i_2]) { widths_1[j] = Math.max(widths_1[j], rows[i_2][j].length); } } var renderRow = function (row) { var res = ""; for (var i_3 = 0; i_3 < cols_1; i_3++) { res += "| ".concat(row[i_3].padEnd(widths_1[i_3]), " "); } res += "|"; return res; }; var renderSep = function () { var res = ""; for (var i_4 = 0; i_4 < cols_1; i_4++) { res += "| ".concat("-".repeat(widths_1[i_4]), " "); } res += "|"; return res; }; res.push(renderRow(rows[0])); res.push(renderSep()); for (var i_5 = 1; i_5 < rows.length; i_5++) { res.push(renderRow(rows[i_5])); } output.push(res.join("\n")); break; } ; } }; for (var i = 0; i < input.length; i++) { _loop_2(i); } return output; }; /** * Renders rich text based on an array of tokens. * @param input An array of TokenTextType objects representing the rich text to render. * @param joint An optional string to join the rendered text with. * @returns A string representing the rendered rich text. */ var renderRich = function (input, joint) { if (joint === void 0) { joint = ""; } var res = ""; for (var _i = 0, input_1 = input; _i < input_1.length; _i++) { var el = input_1[_i]; switch (el.type) { case TokenType.Bold: { res += "**".concat(renderRich(el.content), "**"); break; } ; case TokenType.Italic: { res += "*".concat(renderRich(el.content), "*"); break; } ; case TokenType.InlineLink: { res += "[".concat(el.text, "](").concat(el.href, ")"); break; } ; case TokenType.PlainText: { res += el.text; break; } ; case TokenType.BR: { res += "\n" + joint; break; } ; case TokenType.InlineCode: { res += "`".concat(el.content, "`"); break; } ; case TokenType.Math: { if (input.length == 1) res += "$$\n".concat(el.content, "\n$$"); else res += "$".concat(el.content, "$"); break; } ; } } return joint + res; }; // EXTERNAL MODULE: ./node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/dist/jszip.min.js var jszip_min = __webpack_require__(210); ;// CONCATENATED MODULE: ./src/core/download2zip.ts var download2zip_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var download2zip_generator = (undefined && undefined.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; /** * 下载文件并将其添加到zip文件中 * @param url 下载文件的URL * @param zip JSZip对象,用于创建zip文件 * @returns 添加了下载文件的zip文件 */ function downloadAndZip(url, zip) { return download2zip_awaiter(this, void 0, Promise, function () { var response, arrayBuffer, fileName; return download2zip_generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, fetch(url)]; case 1: response = _a.sent(); return [4 /*yield*/, response.arrayBuffer()]; case 2: arrayBuffer = _a.sent(); fileName = url.replace(/\?.*?$/g, "").split("/").pop(); // 添加到zip文件 zip.file(fileName, arrayBuffer); return [2 /*return*/, { zip: zip, file_name: fileName }]; } }); }); } /** * 下载一系列文件并将其添加到zip文件中 * @param urls 下载文件的URL * @param zip JSZip对象,用于创建zip文件 * @returns 添加了下载文件的zip文件 */ function downloadAndZipAll(urls, zip) { return download2zip_awaiter(this, void 0, Promise, function () { var _i, urls_1, url; return download2zip_generator(this, function (_a) { switch (_a.label) { case 0: _i = 0, urls_1 = urls; _a.label = 1; case 1: if (!(_i < urls_1.length)) return [3 /*break*/, 4]; url = urls_1[_i]; return [4 /*yield*/, downloadAndZip(url, zip)]; case 2: zip = (_a.sent()).zip; _a.label = 3; case 3: _i++; return [3 /*break*/, 1]; case 4: return [2 /*return*/, zip]; } }); }); } ;// CONCATENATED MODULE: ./src/core/savelex.ts var savelex_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var savelex_generator = (undefined && undefined.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; /* harmony default export */ const savelex = (function (lex, assetsPath) { if (assetsPath === void 0) { assetsPath = "assets"; } return savelex_awaiter(void 0, void 0, Promise, function () { var zip, FigureFlag, _i, lex_1, token, assetsFolder, _a, lex_2, token, file_name, file_name, e_1, file_name; return savelex_generator(this, function (_b) { switch (_b.label) { case 0: zip = new jszip_min(); FigureFlag = false; for (_i = 0, lex_1 = lex; _i < lex_1.length; _i++) { token = lex_1[_i]; if (token.type == TokenType.Figure || TokenType.Video || TokenType.Gif) { FigureFlag = true; break; } ; } ; if (!FigureFlag) return [3 /*break*/, 12]; assetsFolder = zip.folder(assetsPath); _a = 0, lex_2 = lex; _b.label = 1; case 1: if (!(_a < lex_2.length)) return [3 /*break*/, 11]; token = lex_2[_a]; if (!(token.type === TokenType.Figure)) return [3 /*break*/, 3]; return [4 /*yield*/, downloadAndZip(token.src, assetsFolder)]; case 2: file_name = (_b.sent()).file_name; token.localSrc = "./".concat(assetsPath, "/").concat(file_name); token.local = true; return [3 /*break*/, 10]; case 3: if (!(token.type === TokenType.Video)) return [3 /*break*/, 8]; _b.label = 4; case 4: _b.trys.push([4, 6, , 7]); return [4 /*yield*/, downloadAndZip(token.src, assetsFolder)]; case 5: file_name = (_b.sent()).file_name; token.localSrc = "./".concat(assetsPath, "/").concat(file_name); token.local = true; return [3 /*break*/, 7]; case 6: e_1 = _b.sent(); console.error('视频', e_1); return [3 /*break*/, 7]; case 7: return [3 /*break*/, 10]; case 8: if (!(token.type === TokenType.Gif)) return [3 /*break*/, 10]; return [4 /*yield*/, downloadAndZip(token.src, assetsFolder)]; case 9: file_name = (_b.sent()).file_name; token.localSrc = "./".concat(assetsPath, "/").concat(file_name); token.local = true; _b.label = 10; case 10: _a++; return [3 /*break*/, 1]; case 11: ; _b.label = 12; case 12: /*const markdown = parser(lex).join("\n\n"); zip.file("index.md", markdown);*/ return [2 /*return*/, { zip: zip, localLex: lex }]; } }); }); }); ;// CONCATENATED MODULE: ./src/dealItem.ts var dealItem_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var dealItem_generator = (undefined && undefined.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; /* harmony default export */ const dealItem = (function (dom, button) { return dealItem_awaiter(void 0, void 0, Promise, function () { var scene, type, title, author, time, url, upvote_num, comment_num, remark, getFrontmatter, getTOC, lex, markdown, dom2, lex2, pinItem, imgs, _a, zip, localLex, openComment, num_text, c, res, l, imgs, m, assetsFolder, i, response, arrayBuffer, fileName, e_1, zopQuestion, _b, zop, zaExtra, location; return dealItem_generator(this, function (_c) { switch (_c.label) { case 0: if (window.location.pathname == "/follow") scene = "follow"; else if (window.location.pathname.slice(0, 7) == "/people" || window.location.pathname.slice(0, 4) == "/org") scene = "people"; else if (window.location.pathname.slice(0, 9) == "/question" && !window.location.pathname.match(/answer/)) scene = "question"; else if (window.location.pathname.slice(0, 9) == "/question" && window.location.pathname.match(/answer/)) scene = "answer"; else if (window.location.pathname.slice(0, 4) == "/pin") scene = "pin"; else if (window.location.hostname == "zhuanlan.zhihu.com") scene = "article"; else if (window.location.pathname.slice(0, 11) == "/collection") scene = "collection"; else if (window.location.pathname.slice(0, 11) == "/search") scene = "collection"; else if (window.location.href == "https://www.zhihu.com/") scene = "collection"; //搜索、推荐、收藏夹似乎一样 else console.log("未知场景"); //console.log(dom) //console.log(getParent(dom, "AnswerItem"), getParent(dom, "ArticleItem"), getParent(dom, "PinItem")) //ContentItem if (getParent(dom, "AnswerItem")) type = "answer"; else if (getParent(dom, "ArticleItem")) type = "article"; else if (getParent(dom, "Post-content")) type = "article"; else if (getParent(dom, "PinItem")) type = "pin"; else { console.log("未知内容"); alert('请勿收起又展开内容,否则会保存失败。请重新保存。'); document.querySelectorAll('.zhihubackup-wrap').forEach(function (w) { return w.remove(); }); } if (!scene || !type) return [2 /*return*/]; title = getTitle(dom, scene, type), author = getAuthor(dom, scene, type); return [4 /*yield*/, getTime(dom, scene)]; case 1: time = _c.sent(), url = getURL(dom, scene, type), upvote_num = getUpvote(dom, scene, type), comment_num = getCommentNum(dom, scene, type); remark = getRemark(dom); if (remark === "非法备注") { alert(decodeURIComponent("备注不可包含%20%20%2F%20%3A%20*%20%3F%20%22%20%3C%20%3E%20%7C")); return [2 /*return*/]; } remark ? remark = "_" + remark : 0; if (button == 'png') return [2 /*return*/, { title: title + "_" + author.name + "_" + time.modified.slice(0, 10) + remark } /** * 生成frontmatter * 标题,链接,作者名,赞数,评论数,创建时间,修改时间 */ ]; getFrontmatter = function () { var fm = '---' + '\ntitle: ' + title + '\nurl: ' + url + '\nauthor: ' + author.name + '\ncreated: ' + time.created + '\nmodified: ' + time.modified + '\nupvote_num: ' + upvote_num + '\ncomment_num: ' + comment_num + '\n---\n'; return fm; }; getTOC = function () { var toc = (getParent(dom, "ContentItem") || getParent(dom, "Post-content")).querySelector(".Catalog-content"); var items = []; if (toc) { var i_1 = 1, j_1 = 1; toc.childNodes.forEach(function (e) { if (e.classList.contains('Catalog-FirstLevelTitle')) { items.push(i_1++ + '. ' + e.textContent); j_1 = 1; } else { items.push(' ' + j_1++ + '. ' + e.textContent); } }); return ['## 目录', items.join('\n')]; } else return null; }; lex = lexer(dom.childNodes, type); markdown = []; if (type == "pin" && getParent(dom, "PinItem").querySelector(".PinItem-content-originpin")) { dom2 = getParent(dom, "PinItem").querySelector(".PinItem-content-originpin .RichText"); lex2 = lexer(dom2.childNodes, type); //markdown = markdown.concat(parser(lex2).map((l) => "> " + l)) markdown.push(parser(lex2).map(function (l) { return "> " + l; }).join("\n> \n")); } if (type == "pin") { pinItem = getParent(dom, "PinItem"); if (pinItem.querySelector(".ContentItem-title")) lex.unshift({ type: TokenType.Text, content: [{ type: TokenType.PlainText, text: pinItem.querySelector(".ContentItem-title").textContent }] }); if (pinItem.querySelector(".Image-PreviewVague")) { imgs = pinItem.querySelectorAll(".Image-PreviewVague > img"); imgs.forEach(function (img) { lex.push({ type: TokenType.Figure, src: img.getAttribute("data-original") || img.getAttribute("data-actualsrc"), }); }); } } if (!(button == 'copy')) return [3 /*break*/, 2]; //放到剪贴板,string[] return [2 /*return*/, { markdown: getTOC() ? getTOC().concat(parser(lex)) : parser(lex) }]; case 2: return [4 /*yield*/, savelex(lex)]; case 3: _a = _c.sent(), zip = _a.zip, localLex = _a.localLex; markdown = parser(localLex); _c.label = 4; case 4: zip.file("index.md", getFrontmatter() + (getTOC() ? getTOC().join("\n\n") + '\n\n' : '') + markdown.join("\n\n")); _c.label = 5; case 5: _c.trys.push([5, 12, , 13]); openComment = (getParent(dom, "ContentItem") || getParent(dom, "Post-content")).querySelector(".Comments-container"); if (!(getCommentSwitch(dom) && openComment)) return [3 /*break*/, 11]; if (!openComment.querySelector('.css-189h5o3')) return [3 /*break*/, 6]; zip.file("comments.md", "**".concat(openComment.querySelector('.css-189h5o3').textContent, "**")); return [3 /*break*/, 11]; case 6: num_text = openComment.childNodes[0].childNodes[1].childNodes[0].childNodes[0].textContent; c = openComment.childNodes[0].childNodes[1].childNodes[1].childNodes[0].childNodes; res = lexerComment(c), l = res[0], imgs = res[1]; m = parserComment(l); if (openComment.querySelector('.css-1tdhe7b')) { m.unshift('**评论内容由作者筛选后展示**\n\n'); } zip.file("comments.md", num_text + '\n\n' + m.join('')); if (!imgs) return [3 /*break*/, 11]; assetsFolder = zip.folder('assets'); i = 0; _c.label = 7; case 7: if (!(i < imgs.length)) return [3 /*break*/, 11]; return [4 /*yield*/, fetch(imgs[i])]; case 8: response = _c.sent(); return [4 /*yield*/, response.arrayBuffer()]; case 9: arrayBuffer = _c.sent(); fileName = imgs[i].replace(/\?.*?$/g, "").split("/").pop(); assetsFolder.file(fileName, arrayBuffer); _c.label = 10; case 10: i++; return [3 /*break*/, 7]; case 11: return [3 /*break*/, 13]; case 12: e_1 = _c.sent(); console.log("评论:", e_1); alert('主要工作已完成,但是评论保存出错了'); return [3 /*break*/, 13]; case 13: zopQuestion = (function () { try { var el = document.querySelector("[data-zop-question]"); if (el) return JSON.parse(el.getAttribute("data-zop-question")); return null; } catch (e) { console.error('data-zop-question', e); alert('保存data-zop-question出错'); } })(); _b = (function () { var _a; var el = getParent(dom, "ContentItem"); //想法类型、文章页没有 if (!el) el = getParent(dom, "PinItem"); if (!el) el = getParent(dom, "Post-content"); try { if (el) return { zop: JSON.parse(el.getAttribute("data-zop")), zaExtra: JSON.parse(el.getAttribute("data-za-extra-module")), location: (_a = el.querySelector('.ContentItem-time').childNodes[1]) === null || _a === void 0 ? void 0 : _a.textContent.slice(6) }; } catch (e) { console.error('zop, zaExtra ,location', e); alert('保存zop, zaExtra ,location出错'); } return null; })(), zop = _b.zop, zaExtra = _b.zaExtra, location = _b.location; zip.file("info.json", JSON.stringify({ title: title, url: url, author: author, time: time, upvote_num: upvote_num, comment_num: comment_num, zop: zop, location: location, "zop-question": zopQuestion, "zop-extra-module": zaExtra, }, null, 4)); return [2 /*return*/, { zip: zip, title: title + "_" + author.name + "_" + time.modified.slice(0, 10) + remark }]; } }); }); }); ;// CONCATENATED MODULE: ./node_modules/.pnpm/modern-screenshot@4.4.37/node_modules/modern-screenshot/dist/index.mjs var _e = Object.defineProperty, Ue = Object.defineProperties; var Pe = Object.getOwnPropertyDescriptors; var B = Object.getOwnPropertySymbols; var Z = Object.prototype.hasOwnProperty, ee = Object.prototype.propertyIsEnumerable; var te = Math.pow, Q = (e, t, r) => t in e ? _e(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r, T = (e, t) => { for (var r in t || (t = {})) Z.call(t, r) && Q(e, r, t[r]); if (B) for (var r of B(t)) ee.call(t, r) && Q(e, r, t[r]); return e; }, R = (e, t) => Ue(e, Pe(t)); var re = (e, t) => { var r = {}; for (var n in e) Z.call(e, n) && t.indexOf(n) < 0 && (r[n] = e[n]); if (e != null && B) for (var n of B(e)) t.indexOf(n) < 0 && ee.call(e, n) && (r[n] = e[n]); return r; }; var S = (e, t, r) => new Promise((n, a) => { var s = (l) => { try { i(r.next(l)); } catch (u) { a(u); } }, o = (l) => { try { i(r.throw(l)); } catch (u) { a(u); } }, i = (l) => l.done ? n(l.value) : Promise.resolve(l.value).then(s, o); i((r = r.apply(e, t)).next()); }); function ue(e, t) { return e[13] = 1, e[14] = t >> 8, e[15] = t & 255, e[16] = t >> 8, e[17] = t & 255, e; } const fe = "p".charCodeAt(0), de = "H".charCodeAt(0), ge = "Y".charCodeAt(0), me = "s".charCodeAt(0); let j; function $e() { const e = new Int32Array(256); for (let t = 0; t < 256; t++) { let r = t; for (let n = 0; n < 8; n++) r = r & 1 ? 3988292384 ^ r >>> 1 : r >>> 1; e[t] = r; } return e; } function Be(e) { let t = -1; j || (j = $e()); for (let r = 0; r < e.length; r++) t = j[(t ^ e[r]) & 255] ^ t >>> 8; return t ^ -1; } function Le(e) { const t = e.length - 1; for (let r = t; r >= 4; r--) if (e[r - 4] === 9 && e[r - 3] === fe && e[r - 2] === de && e[r - 1] === ge && e[r] === me) return r - 3; return 0; } function he(e, t, r = !1) { const n = new Uint8Array(13); t *= 39.3701, n[0] = fe, n[1] = de, n[2] = ge, n[3] = me, n[4] = t >>> 24, n[5] = t >>> 16, n[6] = t >>> 8, n[7] = t & 255, n[8] = n[4], n[9] = n[5], n[10] = n[6], n[11] = n[7], n[12] = 1; const a = Be(n), s = new Uint8Array(4); if (s[0] = a >>> 24, s[1] = a >>> 16, s[2] = a >>> 8, s[3] = a & 255, r) { const o = Le(e); return e.set(n, o), e.set(s, o + 13), e; } else { const o = new Uint8Array(4); o[0] = 0, o[1] = 0, o[2] = 0, o[3] = 9; const i = new Uint8Array(54); return i.set(e, 0), i.set(o, 33), i.set(n, 37), i.set(s, 50), i; } } const Me = "AAlwSFlz", Oe = "AAAJcEhZ", We = "AAAACXBI"; function qe(e) { let t = e.indexOf(Me); return t === -1 && (t = e.indexOf(Oe)), t === -1 && (t = e.indexOf(We)), t; } const H = "[modern-screenshot]", x = typeof window != "undefined", je = x && "Worker" in window, we = x && "atob" in window, Ve = x && "btoa" in window; var le; const z = x ? (le = window.navigator) == null ? void 0 : le.userAgent : "", pe = z.includes("Chrome"), L = z.includes("AppleWebKit") && !pe, X = z.includes("Firefox"), He = (e) => e && "__CONTEXT__" in e, ze = (e) => e.constructor.name === "CSSFontFaceRule", Xe = (e) => e.constructor.name === "CSSImportRule", A = (e) => e.nodeType === 1, U = (e) => typeof e.className == "object", ye = (e) => e.tagName === "image", Ge = (e) => e.tagName === "use", G = (e) => A(e) && typeof e.style != "undefined" && !U(e), Ye = (e) => e.nodeType === 8, Je = (e) => e.nodeType === 3, D = (e) => e.tagName === "IMG", M = (e) => e.tagName === "VIDEO", Ke = (e) => e.tagName === "CANVAS", ne = (e) => e.tagName === "TEXTAREA", Qe = (e) => e.tagName === "INPUT", Ze = (e) => e.tagName === "STYLE", et = (e) => e.tagName === "SCRIPT", tt = (e) => e.tagName === "SELECT", rt = (e) => e.tagName === "SLOT", nt = (e) => e.tagName === "IFRAME", E = (...e) => console.warn(H, ...e), ot = (e) => console.time(`${H} ${e}`), at = (e) => console.timeEnd(`${H} ${e}`), st = (e) => { var r; const t = (r = e == null ? void 0 : e.createElement) == null ? void 0 : r.call(e, "canvas"); return t && (t.height = t.width = 1), t && "toDataURL" in t && Boolean(t.toDataURL("image/webp").includes("image/webp")); }, V = (e) => e.startsWith("data:"); function be(e, t) { if (e.match(/^[a-z]+:\/\//i)) return e; if (x && e.match(/^\/\//)) return window.location.protocol + e; if (e.match(/^[a-z]+:/i) || !x) return e; const r = O().implementation.createHTMLDocument(), n = r.createElement("base"), a = r.createElement("a"); return r.head.appendChild(n), r.body.appendChild(a), t && (n.href = t), a.href = e, a.href; } function O(e) { var t; return (t = e && A(e) ? e == null ? void 0 : e.ownerDocument : e) != null ? t : window.document; } const W = "http://www.w3.org/2000/svg"; function Se(e, t, r) { const n = O(r).createElementNS(W, "svg"); return n.setAttributeNS(null, "width", e.toString()), n.setAttributeNS(null, "height", t.toString()), n.setAttributeNS(null, "viewBox", `0 0 ${e} ${t}`), n; } function Ee(e, t) { let r = new XMLSerializer().serializeToString(e); return t && (r = r.replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\uD800-\uDFFF\uFFFE\uFFFF]/ug, "")), `data:image/svg+xml;charset=utf-8,${encodeURIComponent(r)}`; } function it(e, t = "image/png", r = 1) { return S(this, null, function* () { try { return yield new Promise((n, a) => { e.toBlob((s) => { s ? n(s) : a(new Error("Blob is null")); }, t, r); }); } catch (n) { if (we) return E("Failed canvas to blob", { type: t, quality: r }, n), ct(e.toDataURL(t, r)); throw n; } }); } function ct(e) { var i, l; const [t, r] = e.split(","), n = (l = (i = t.match(/data:(.+);/)) == null ? void 0 : i[1]) != null ? l : void 0, a = window.atob(r), s = a.length, o = new Uint8Array(s); for (let u = 0; u < s; u += 1) o[u] = a.charCodeAt(u); return new Blob([o], { type: n }); } function Ce(e, t) { return new Promise((r, n) => { const a = new FileReader(); a.onload = () => r(a.result), a.onerror = () => n(a.error), a.onabort = () => n(new Error(`Failed read blob to ${t}`)), t === "dataUrl" ? a.readAsDataURL(e) : t === "arrayBuffer" && a.readAsArrayBuffer(e); }); } const lt = (e) => Ce(e, "dataUrl"), ut = (e) => Ce(e, "arrayBuffer"); function k(e, t) { const r = O(t).createElement("img"); return r.decoding = "sync", r.loading = "eager", r.src = e, r; } function F(e, t) { return new Promise((r) => { const { timeout: n, ownerDocument: a, onError: s } = t != null ? t : {}, o = typeof e == "string" ? k(e, O(a)) : e; let i = null, l = null; function u() { r(o), i && clearTimeout(i), l == null || l(); } if (n && (i = setTimeout(u, n)), M(o)) { const c = o.currentSrc || o.src; if (!c) return o.poster ? F(o.poster, t).then(r) : u(); if (o.readyState >= 2) return u(); const f = u, d = (g) => { E( "Failed video load", c, g ), s == null || s(g), u(); }; l = () => { o.removeEventListener("loadeddata", f), o.removeEventListener("error", d); }, o.addEventListener("loadeddata", f, { once: !0 }), o.addEventListener("error", d, { once: !0 }); } else { const c = ye(o) ? o.href.baseVal : o.currentSrc || o.src; if (!c) return u(); const f = () => S(this, null, function* () { if (D(o) && "decode" in o) try { yield o.decode(); } catch (g) { E( "Failed to decode image, trying to render anyway", o.dataset.originalSrc || c, g ); } u(); }), d = (g) => { E( "Failed image load", o.dataset.originalSrc || c, g ), u(); }; if (D(o) && o.complete) return f(); l = () => { o.removeEventListener("load", f), o.removeEventListener("error", d); }, o.addEventListener("load", f, { once: !0 }), o.addEventListener("error", d, { once: !0 }); } }); } function ft(e, t) { return S(this, null, function* () { G(e) && (D(e) || M(e) ? yield F(e, { timeout: t }) : yield Promise.all( ["img", "video"].flatMap((r) => Array.from(e.querySelectorAll(r)).map((n) => F(n, { timeout: t }))) )); }); } const ve = function() { let t = 0; const r = () => ( // eslint-disable-next-line no-bitwise `0000${(Math.random() * te(36, 4) << 0).toString(36)}`.slice(-4) ); return () => (t += 1, `u${r()}${t}`); }(); function Te(e) { return e == null ? void 0 : e.split(",").map((t) => t.trim().replace(/"|'/g, "").toLowerCase()).filter(Boolean); } function dt(e) { return { time: (t) => e && ot(t), timeEnd: (t) => e && at(t), warn: (...t) => e && E(...t) }; } function gt(e) { return { cache: e ? "no-cache" : "force-cache" }; } function N(e, t) { return S(this, null, function* () { return He(e) ? e : mt(e, R(T({}, t), { autoDestruct: !0 })); }); } function mt(e, t) { return S(this, null, function* () { var g, h, w, y, m; const { scale: r = 1, workerUrl: n, workerNumber: a = 1 } = t || {}, s = Boolean(t == null ? void 0 : t.debug), o = (g = t == null ? void 0 : t.features) != null ? g : !0, i = (h = e.ownerDocument) != null ? h : x ? window.document : void 0, l = (y = (w = e.ownerDocument) == null ? void 0 : w.defaultView) != null ? y : x ? window : void 0, u = /* @__PURE__ */ new Map(), c = R(T({ // Options width: 0, height: 0, quality: 1, type: "image/png", scale: r, backgroundColor: null, style: null, filter: null, maximumCanvasSize: 0, timeout: 3e4, progress: null, debug: s, fetch: T({ requestInit: gt((m = t == null ? void 0 : t.fetch) == null ? void 0 : m.bypassingCache), placeholderImage: "data:image/png;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7", bypassingCache: !1 }, t == null ? void 0 : t.fetch), fetchFn: null, font: {}, drawImageInterval: 100, workerUrl: null, workerNumber: a, onCloneNode: null, onEmbedNode: null, onCreateForeignObjectSvg: null, includeStyleProperties: null, autoDestruct: !1 }, t), { // InternalContext __CONTEXT__: !0, log: dt(s), node: e, ownerDocument: i, ownerWindow: l, dpi: r === 1 ? null : 96 * r, svgStyleElement: Ae(i), svgDefsElement: i == null ? void 0 : i.createElementNS(W, "defs"), svgStyles: /* @__PURE__ */ new Map(), defaultComputedStyles: /* @__PURE__ */ new Map(), workers: [ ...new Array( je && n && a ? a : 0 ) ].map(() => { try { const b = new Worker(n); return b.onmessage = (p) => S(this, null, function* () { var I, J, $, K; const { url: C, result: v } = p.data; v ? (J = (I = u.get(C)) == null ? void 0 : I.resolve) == null || J.call(I, v) : (K = ($ = u.get(C)) == null ? void 0 : $.reject) == null || K.call($, new Error(`Error receiving message from worker: ${C}`)); }), b.onmessageerror = (p) => { var v, I; const { url: C } = p.data; (I = (v = u.get(C)) == null ? void 0 : v.reject) == null || I.call(v, new Error(`Error receiving message from worker: ${C}`)); }, b; } catch (b) { return E("Failed to new Worker", b), null; } }).filter(Boolean), fontFamilies: /* @__PURE__ */ new Set(), fontCssTexts: /* @__PURE__ */ new Map(), acceptOfImage: `${[ st(i) && "image/webp", "image/svg+xml", "image/*", "*/*" ].filter(Boolean).join(",")};q=0.8`, requests: u, drawImageCount: 0, tasks: [], features: o, isEnable: (b) => { var p; return typeof o == "boolean" ? o : (p = o[b]) != null ? p : !0; } }); c.log.time("wait until load"), yield ft(e, c.timeout), c.log.timeEnd("wait until load"); const { width: f, height: d } = ht(e, c); return c.width = f, c.height = d, c; }); } function Ae(e) { if (!e) return; const t = e.createElement("style"), r = t.ownerDocument.createTextNode(` .______background-clip--text { background-clip: text; -webkit-background-clip: text; } `); return t.appendChild(r), t; } function ht(e, t) { let { width: r, height: n } = t; if (A(e) && (!r || !n)) { const a = e.getBoundingClientRect(); r = r || a.width || Number(e.getAttribute("width")) || 0, n = n || a.height || Number(e.getAttribute("height")) || 0; } return { width: r, height: n }; } function wt(e, t) { return S(this, null, function* () { const { log: r, timeout: n, drawImageCount: a, drawImageInterval: s } = t; r.time("image to canvas"); const o = yield F(e, { timeout: n }), { canvas: i, context2d: l } = pt(e.ownerDocument, t), u = () => { try { l == null || l.drawImage(o, 0, 0, i.width, i.height); } catch (c) { E("Failed to drawImage", c); } }; if (u(), t.isEnable("fixSvgXmlDecode")) for (let c = 0; c < a; c++) yield new Promise((f) => { setTimeout(() => { u(), f(); }, c + s); }); return t.drawImageCount = 0, r.timeEnd("image to canvas"), i; }); } function pt(e, t) { const { width: r, height: n, scale: a, backgroundColor: s, maximumCanvasSize: o } = t, i = e.createElement("canvas"); i.width = Math.floor(r * a), i.height = Math.floor(n * a), i.style.width = `${r}px`, i.style.height = `${n}px`, o && (i.width > o || i.height > o) && (i.width > o && i.height > o ? i.width > i.height ? (i.height *= o / i.width, i.width = o) : (i.width *= o / i.height, i.height = o) : i.width > o ? (i.height *= o / i.width, i.width = o) : (i.width *= o / i.height, i.height = o)); const l = i.getContext("2d"); return l && s && (l.fillStyle = s, l.fillRect(0, 0, i.width, i.height)), { canvas: i, context2d: l }; } const yt = [ "width", "height", "-webkit-text-fill-color" ], bt = [ "stroke", "fill" ]; function Ne(e, t, r) { var y; const { defaultComputedStyles: n, ownerDocument: a } = r, s = e.nodeName.toLowerCase(), o = U(e) && s !== "svg", i = o ? bt.map((m) => [m, e.getAttribute(m)]).filter(([, m]) => m !== null) : [], l = [ o && "svg", s, i.map((m, b) => `${m}=${b}`).join(","), t ].filter(Boolean).join(":"); if (n.has(l)) return n.get(l); let u = r.sandbox; if (!u) try { a && (u = a.createElement("iframe"), u.id = `__SANDBOX__-${ve()}`, u.width = "0", u.height = "0", u.style.visibility = "hidden", u.style.position = "fixed", a.body.appendChild(u), (y = u.contentWindow) == null || y.document.write(''), r.sandbox = u); } catch (m) { E("Failed to create iframe sandbox", m); } if (!u) return /* @__PURE__ */ new Map(); const c = u.contentWindow; if (!c) return /* @__PURE__ */ new Map(); const f = c.document; let d, g; o ? (d = f.createElementNS(W, "svg"), g = d.ownerDocument.createElementNS(d.namespaceURI, s), i.forEach(([m, b]) => { g.setAttributeNS(null, m, b); }), d.appendChild(g)) : d = g = f.createElement(s), g.textContent = " ", f.body.appendChild(d); const h = c.getComputedStyle(g, t), w = /* @__PURE__ */ new Map(); for (let m = h.length, b = 0; b < m; b++) { const p = h.item(b); yt.includes(p) || w.set(p, h.getPropertyValue(p)); } return f.body.removeChild(d), n.set(l, w), w; } function Ie(e, t, r) { var i; const n = /* @__PURE__ */ new Map(), a = [], s = /* @__PURE__ */ new Map(); if (r) for (const l of r) o(l); else for (let l = e.length, u = 0; u < l; u++) { const c = e.item(u); o(c); } for (let l = a.length, u = 0; u < l; u++) (i = s.get(a[u])) == null || i.forEach((c, f) => n.set(f, c)); function o(l) { const u = e.getPropertyValue(l), c = e.getPropertyPriority(l), f = l.lastIndexOf("-"), d = f > -1 ? l.substring(0, f) : void 0; if (d) { let g = s.get(d); g || (g = /* @__PURE__ */ new Map(), s.set(d, g)), g.set(l, [u, c]); } t.get(l) === u && !c || (d ? a.push(d) : n.set(l, [u, c])); } return n; } const St = [ ":before", ":after" // ':placeholder', TODO ], Et = [ ":-webkit-scrollbar", ":-webkit-scrollbar-button", // ':-webkit-scrollbar:horizontal', TODO ":-webkit-scrollbar-thumb", ":-webkit-scrollbar-track", ":-webkit-scrollbar-track-piece", // ':-webkit-scrollbar:vertical', TODO ":-webkit-scrollbar-corner", ":-webkit-resizer" ]; function Ct(e, t, r, n) { const { ownerWindow: a, svgStyleElement: s, svgStyles: o, currentNodeStyle: i } = n; if (!s || !a) return; function l(u) { var b; const c = a.getComputedStyle(e, u); let f = c.getPropertyValue("content"); if (!f || f === "none") return; f = f.replace(/(')|(")|(counter\(.+\))/g, ""); const d = [ve()], g = Ne(e, u, n); i == null || i.forEach((p, C) => { g.delete(C); }); const h = Ie(c, g, n.includeStyleProperties); h.delete("content"), h.delete("-webkit-locale"), ((b = h.get("background-clip")) == null ? void 0 : b[0]) === "text" && t.classList.add("______background-clip--text"); const w = [ `content: '${f}';` ]; if (h.forEach(([p, C], v) => { w.push(`${v}: ${p}${C ? " !important" : ""};`); }), w.length === 1) return; try { t.className = [t.className, ...d].join(" "); } catch (p) { return; } const y = w.join(` `); let m = o.get(y); m || (m = [], o.set(y, m)), m.push(`.${d[0]}:${u}`); } St.forEach(l), r && Et.forEach(l); } function vt(e, t) { ne(e) && (t.innerHTML = e.value), (ne(e) || Qe(e) || tt(e)) && t.setAttribute("value", e.value); } function Tt(e, t, r, n) { var f, d, g, h; const { ownerWindow: a, includeStyleProperties: s, currentParentNodeStyle: o } = n, i = t.style, l = a.getComputedStyle(e), u = Ne(e, null, n); o == null || o.forEach((w, y) => { u.delete(y); }); const c = Ie(l, u, s); return c.delete("transition-property"), c.delete("all"), c.delete("d"), c.delete("content"), r && (c.delete("margin-top"), c.delete("margin-right"), c.delete("margin-bottom"), c.delete("margin-left"), c.delete("margin-block-start"), c.delete("margin-block-end"), c.delete("margin-inline-start"), c.delete("margin-inline-end"), c.set("box-sizing", ["border-box", ""])), ((f = c.get("background-clip")) == null ? void 0 : f[0]) === "text" && t.classList.add("______background-clip--text"), pe && (c.has("font-kerning") || c.set("font-kerning", ["normal", ""]), (((d = c.get("overflow-x")) == null ? void 0 : d[0]) === "hidden" || ((g = c.get("overflow-y")) == null ? void 0 : g[0]) === "hidden") && ((h = c.get("text-overflow")) == null ? void 0 : h[0]) === "ellipsis" && e.scrollWidth === e.clientWidth && c.set("text-overflow", ["clip", ""])), c.forEach(([w, y], m) => { i.setProperty(m, w, y); }), c; } function At(e, t) { var r; try { if ((r = e == null ? void 0 : e.contentDocument) != null && r.body) return q(e.contentDocument.body, t); } catch (n) { E("Failed to clone iframe", n); } return e.cloneNode(!1); } function xe(e) { if (e.ownerDocument) try { const a = e.toDataURL(); if (a !== "data:,") return k(a, e.ownerDocument); } catch (a) { } const t = e.cloneNode(!1), r = e.getContext("2d"), n = t.getContext("2d"); try { return r && n && n.putImageData( r.getImageData(0, 0, e.width, e.height), 0, 0 ), t; } catch (a) { E("Failed to clone canvas", a); } return t; } function Nt(e) { return S(this, null, function* () { if (e.ownerDocument && !e.currentSrc && e.poster) return k(e.poster, e.ownerDocument); const t = e.cloneNode(!1); t.crossOrigin = "anonymous", e.currentSrc && e.currentSrc !== e.src && (t.src = e.currentSrc); const r = t.ownerDocument; if (r) { let n = !0; if (yield F(t, { onError: () => n = !1 }), !n) return e.poster ? k(e.poster, e.ownerDocument) : t; t.currentTime = e.currentTime, yield new Promise((s) => { t.addEventListener("seeked", s, { once: !0 }); }); const a = r.createElement("canvas"); a.width = e.offsetWidth, a.height = e.offsetHeight; try { const s = a.getContext("2d"); s && s.drawImage(t, 0, 0, a.width, a.height); } catch (s) { return E("Failed to clone video", s), e.poster ? k(e.poster, e.ownerDocument) : t; } return xe(a); } return t; }); } function It(e) { const t = e.cloneNode(!1); return e.currentSrc && e.currentSrc !== e.src && (t.src = e.currentSrc, t.srcset = ""), t.loading === "lazy" && (t.loading = "eager"), t; } function xt(e, t) { return Ke(e) ? xe(e) : nt(e) ? At(e, t) : D(e) ? It(e) : M(e) ? Nt(e) : e.cloneNode(!1); } const oe = /* @__PURE__ */ new Set([ "symbol" // test/fixtures/svg.symbol.html ]); function ae(e, t, r) { return S(this, null, function* () { A(t) && (Ze(t) || et(t)) || r.filter && !r.filter(t) || (oe.has(e.nodeName) || oe.has(t.nodeName) ? r.currentParentNodeStyle = void 0 : r.currentParentNodeStyle = r.currentNodeStyle, e.appendChild(yield q(t, r))); }); } function se(e, t, r) { return S(this, null, function* () { var a, s; const n = (s = A(e) ? (a = e.shadowRoot) == null ? void 0 : a.firstChild : void 0) != null ? s : e.firstChild; for (let o = n; o; o = o.nextSibling) if (!Ye(o)) if (A(o) && rt(o) && typeof o.assignedNodes == "function") { const i = o.assignedNodes(); for (let l = 0; l < i.length; l++) yield ae(t, i[l], r); } else yield ae(t, o, r); }); } function kt(e, t) { const { backgroundColor: r, width: n, height: a, style: s } = t, o = e.style; if (r && o.setProperty("background-color", r, "important"), n && o.setProperty("width", `${n}px`, "important"), a && o.setProperty("height", `${a}px`, "important"), s) for (const i in s) o[i] = s[i]; } const Rt = /^[\w-:]+$/; function q(e, t, r = !1) { return S(this, null, function* () { var i, l, u, c; const { ownerDocument: n, ownerWindow: a, fontFamilies: s } = t; if (n && Je(e)) return n.createTextNode(e.data); if (n && a && A(e) && (G(e) || U(e))) { const f = yield xt(e, t); if (t.isEnable("removeAbnormalAttributes")) { const h = f.getAttributeNames(); for (let w = h.length, y = 0; y < w; y++) { const m = h[y]; Rt.test(m) || f.removeAttribute(m); } } const d = t.currentNodeStyle = Tt(e, f, r, t); r && kt(f, t); let g = !1; if (t.isEnable("copyScrollbar")) { const h = [ (i = d.get("overflow-x")) == null ? void 0 : i[0], (l = d.get("overflow-y")) == null ? void 0 : l[1] ]; g = h.includes("scroll") || (h.includes("auto") || h.includes("overlay")) && (e.scrollHeight > e.clientHeight || e.scrollWidth > e.clientWidth); } return Ct(e, f, g, t), vt(e, f), (c = Te((u = d.get("font-family")) == null ? void 0 : u[0])) == null || c.forEach((h) => s.add(h)), M(e) || (yield se(e, f, t)), f; } const o = e.cloneNode(!1); return yield se(e, o, t), o; }); } function Dt(e) { if (e.ownerDocument = void 0, e.ownerWindow = void 0, e.svgStyleElement = void 0, e.svgDefsElement = void 0, e.svgStyles.clear(), e.defaultComputedStyles.clear(), e.sandbox) { try { e.sandbox.remove(); } catch (t) { } e.sandbox = void 0; } e.workers = [], e.fontFamilies.clear(), e.fontCssTexts.clear(), e.requests.clear(), e.tasks = []; } function Ft(e) { const i = e, { url: t, timeout: r, responseType: n } = i, a = re(i, ["url", "timeout", "responseType"]), s = new AbortController(), o = r ? setTimeout(() => s.abort(), r) : void 0; return fetch(t, T({ signal: s.signal }, a)).then((l) => { if (!l.ok) throw new Error("Failed fetch, not 2xx response", { cause: l }); switch (n) { case "dataUrl": return l.blob().then(lt); case "text": default: return l.text(); } }).finally(() => clearTimeout(o)); } function _(e, t) { const { url: r, requestType: n = "text", responseType: a = "text", imageDom: s } = t; let o = r; const { timeout: i, acceptOfImage: l, requests: u, fetchFn: c, fetch: { requestInit: f, bypassingCache: d, placeholderImage: g }, workers: h } = e; n === "image" && (L || X) && e.drawImageCount++; let w = u.get(r); if (!w) { d && d instanceof RegExp && d.test(o) && (o += (/\?/.test(o) ? "&" : "?") + new Date().getTime()); const y = T({ url: o, timeout: i, responseType: a, headers: n === "image" ? { accept: l } : void 0 }, f); w = { type: n, resolve: void 0, reject: void 0, response: null }, w.response = (() => S(this, null, function* () { if (c && n === "image") { const m = yield c(r); if (m) return m; } return !L && r.startsWith("http") && h.length ? new Promise((m, b) => { h[u.size & h.length - 1].postMessage(T({ rawUrl: r }, y)), w.resolve = m, w.reject = b; }) : Ft(y); }))().catch((m) => { if (u.delete(r), n === "image" && g) return E("Failed to fetch image base64, trying to use placeholder image", o), typeof g == "string" ? g : g(s); throw m; }), u.set(r, w); } return w.response; } function ke(e, t, r, n) { return S(this, null, function* () { if (!Re(e)) return e; for (const [a, s] of _t(e, t)) try { const o = yield _( r, { url: s, requestType: n ? "image" : "text", responseType: "dataUrl" } ); e = e.replace(Ut(a), `$1${o}$3`); } catch (o) { E("Failed to fetch css data url", a, o); } return e; }); } function Re(e) { return /url\((['"]?)([^'"]+?)\1\)/.test(e); } const De = /url\((['"]?)([^'"]+?)\1\)/g; function _t(e, t) { const r = []; return e.replace(De, (n, a, s) => (r.push([s, be(s, t)]), n)), r.filter(([n]) => !V(n)); } function Ut(e) { const t = e.replace(/([.*+?^${}()|\[\]\/\\])/g, "\\$1"); return new RegExp(`(url\\(['"]?)(${t})(['"]?\\))`, "g"); } function Pt(e, t) { return S(this, null, function* () { const { ownerDocument: r, svgStyleElement: n, fontFamilies: a, fontCssTexts: s, tasks: o, font: i } = t; if (!(!r || !n || !a.size)) if (i && i.cssText) { const l = ce(i.cssText, t); n.appendChild(r.createTextNode(`${l} `)); } else { const l = Array.from(r.styleSheets).filter((c) => { try { return "cssRules" in c && Boolean(c.cssRules.length); } catch (f) { return E(`Error while reading CSS rules from ${c.href}`, f), !1; } }); yield Promise.all( l.flatMap((c) => Array.from(c.cssRules).map((f, d) => S(this, null, function* () { if (Xe(f)) { let g = d + 1; const h = f.href; let w = ""; try { w = yield _(t, { url: h, requestType: "text", responseType: "text" }); } catch (m) { E(`Error fetch remote css import from ${h}`, m); } const y = w.replace( De, (m, b, p) => m.replace(p, be(p, h)) ); for (const m of Bt(y)) try { c.insertRule( m, m.startsWith("@import") ? g += 1 : c.cssRules.length ); } catch (b) { E("Error inserting rule from remote css import", { rule: m, error: b }); } } }))) ), l.flatMap((c) => Array.from(c.cssRules)).filter((c) => { var f; return ze(c) && Re(c.style.getPropertyValue("src")) && ((f = Te(c.style.getPropertyValue("font-family"))) == null ? void 0 : f.some((d) => a.has(d))); }).forEach((c) => { const f = c, d = s.get(f.cssText); d ? n.appendChild(r.createTextNode(`${d} `)) : o.push( ke( f.cssText, f.parentStyleSheet ? f.parentStyleSheet.href : null, t ).then((g) => { g = ce(g, t), s.set(f.cssText, g), n.appendChild(r.createTextNode(`${g} `)); }) ); }); } }); } const $t = /(\/\*[\s\S]*?\*\/)/gi, ie = /((@.*?keyframes [\s\S]*?){([\s\S]*?}\s*?)})/gi; function Bt(e) { if (e == null) return []; const t = []; let r = e.replace($t, ""); for (; ; ) { const s = ie.exec(r); if (!s) break; t.push(s[0]); } r = r.replace(ie, ""); const n = /@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi, a = new RegExp( "((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})", "gi" ); for (; ; ) { let s = n.exec(r); if (s) a.lastIndex = n.lastIndex; else if (s = a.exec(r), s) n.lastIndex = a.lastIndex; else break; t.push(s[0]); } return t; } const Lt = /url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g, Mt = /src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g; function ce(e, t) { const { font: r } = t, n = r ? r == null ? void 0 : r.preferredFormat : void 0; return n ? e.replace(Mt, (a) => { for (; ; ) { const [s, , o] = Lt.exec(a) || []; if (!o) return ""; if (o === n) return `src: ${s};`; } }) : e; } function Ot(e, t) { if (D(e)) { const r = e.currentSrc || e.src; if (!V(r)) return [ _(t, { url: r, imageDom: e, requestType: "image", responseType: "dataUrl" }).then((n) => { n && (e.srcset = "", e.dataset.originalSrc = r, e.src = n || ""); }) ]; (L || X) && t.drawImageCount++; } else if (U(e) && !V(e.href.baseVal)) { const r = e.href.baseVal; return [ _(t, { url: r, imageDom: e, requestType: "image", responseType: "dataUrl" }).then((n) => { n && (e.dataset.originalSrc = r, e.href.baseVal = n || ""); }) ]; } return []; } const Wt = [ "background-image", "border-image-source", "-webkit-border-image", "-webkit-mask-image", "list-style-image" ]; function qt(e, t) { return Wt.map((r) => { const n = e.getPropertyValue(r); return !n || n === "none" ? null : ((L || X) && t.drawImageCount++, ke(n, null, t, !0).then((a) => { !a || n === a || e.setProperty( r, a, e.getPropertyPriority(r) ); })); }).filter(Boolean); } function jt(e, t) { var i; const { ownerDocument: r, svgDefsElement: n } = t, a = (i = e.getAttribute("href")) != null ? i : e.getAttribute("xlink:href"); if (!a) return []; const [s, o] = a.split("#"); if (o) { const l = `#${o}`, u = r == null ? void 0 : r.querySelector(`svg ${l}`); if (s && e.setAttribute("href", l), n != null && n.querySelector(l)) return []; if (u) return [ q(u, t).then((c) => { n != null && n.querySelector(l) || n == null || n.appendChild(c); }) ]; if (s) return [ _(t, { url: s, responseType: "text" }).then((c) => { n == null || n.insertAdjacentHTML("beforeend", c); }) ]; } return []; } function Fe(e, t) { const { tasks: r } = t; A(e) && ((D(e) || ye(e)) && r.push(...Ot(e, t)), Ge(e) && r.push(...jt(e, t))), G(e) && r.push(...qt(e.style, t)), e.childNodes.forEach((n) => { Fe(n, t); }); } function Vt(e, t) { return S(this, null, function* () { const r = yield N(e, t); if (A(r.node) && U(r.node)) return r.node; const { ownerDocument: n, log: a, tasks: s, svgStyleElement: o, svgDefsElement: i, svgStyles: l, font: u, progress: c, autoDestruct: f, onCloneNode: d, onEmbedNode: g, onCreateForeignObjectSvg: h } = r; a.time("clone node"); const w = yield q(r.node, r, !0); if (o && n) { let C = ""; l.forEach((v, I) => { C += `${v.join(`, `)} { ${I} } `; }), o.appendChild(n.createTextNode(C)); } a.timeEnd("clone node"), d == null || d(w), u !== !1 && A(w) && (a.time("embed web font"), yield Pt(w, r), a.timeEnd("embed web font")), a.time("embed node"), Fe(w, r); const y = s.length; let m = 0; const b = () => S(this, null, function* () { for (; ; ) { const C = s.pop(); if (!C) break; try { yield C; } catch (v) { E("Failed to run task", v); } c == null || c(++m, y); } }); c == null || c(m, y), yield Promise.all([...Array(4)].map(b)), a.timeEnd("embed node"), g == null || g(w); const p = Ht(w, r); return i && p.insertBefore(i, p.children[0]), o && p.insertBefore(o, p.children[0]), f && Dt(r), h == null || h(p), p; }); } function Ht(e, t) { const { width: r, height: n } = t, a = Se(r, n, e.ownerDocument), s = a.ownerDocument.createElementNS(a.namespaceURI, "foreignObject"); return s.setAttributeNS(null, "x", "0%"), s.setAttributeNS(null, "y", "0%"), s.setAttributeNS(null, "width", "100%"), s.setAttributeNS(null, "height", "100%"), s.append(e), a.appendChild(s), a; } function Y(e, t) { return S(this, null, function* () { var o; const r = yield N(e, t), n = yield Vt(r), a = Ee(n, r.isEnable("removeControlCharacter")); r.autoDestruct || (r.svgStyleElement = Ae(r.ownerDocument), r.svgDefsElement = (o = r.ownerDocument) == null ? void 0 : o.createElementNS(W, "defs"), r.svgStyles.clear()); const s = k(a, n.ownerDocument); return yield wt(s, r); }); } function Gt(e, t) { return S(this, null, function* () { const r = yield N(e, t), { log: n, type: a, quality: s, dpi: o } = r, i = yield Y(r); n.time("canvas to blob"); const l = yield it(i, a, s); if (["image/png", "image/jpeg"].includes(a) && o) { const u = yield ut(l.slice(0, 33)); let c = new Uint8Array(u); return a === "image/png" ? c = he(c, o) : a === "image/jpeg" && (c = ue(c, o)), n.timeEnd("canvas to blob"), new Blob([c, l.slice(33)], { type: a }); } return n.timeEnd("canvas to blob"), l; }); } function P(e, t) { return S(this, null, function* () { const r = yield N(e, t), { log: n, quality: a, type: s, dpi: o } = r, i = yield Y(r); n.time("canvas to data url"); let l = i.toDataURL(s, a); if (["image/png", "image/jpeg"].includes(s) && o && we && Ve) { const [u, c] = l.split(","); let f = 0, d = !1; if (s === "image/png") { const p = qe(c); p >= 0 ? (f = Math.ceil((p + 28) / 3) * 4, d = !0) : f = 33 / 3 * 4; } else s === "image/jpeg" && (f = 18 / 3 * 4); const g = c.substring(0, f), h = c.substring(f), w = window.atob(g), y = new Uint8Array(w.length); for (let p = 0; p < y.length; p++) y[p] = w.charCodeAt(p); const m = s === "image/png" ? he(y, o, d) : ue(y, o), b = window.btoa(String.fromCharCode(...m)); l = [u, ",", b, h].join(""); } return n.timeEnd("canvas to data url"), l; }); } function zt(e, t) { return S(this, null, function* () { const r = yield N(e, t), { width: n, height: a, ownerDocument: s } = r, o = yield P(r), i = Se(n, a, s), l = i.ownerDocument.createElementNS(i.namespaceURI, "image"); return l.setAttributeNS(null, "href", o), l.setAttributeNS(null, "height", "100%"), l.setAttributeNS(null, "width", "100%"), i.appendChild(l), Ee(i, r.isEnable("removeControlCharacter")); }); } function Yt(e, t) { return S(this, null, function* () { const r = yield N(e, t), { ownerDocument: n, width: a, height: s, scale: o, type: i } = r, l = i === "image/svg+xml" ? yield zt(r) : yield P(r), u = k(l, n); return u.width = Math.floor(a * o), u.height = Math.floor(s * o), u.style.width = `${a}px`, u.style.height = `${s}px`, u; }); } function Jt(e, t) { return S(this, null, function* () { return P( yield N(e, R(T({}, t), { type: "image/jpeg" })) ); }); } function Kt(e, t) { return S(this, null, function* () { const r = yield N(e, t), n = yield Y(r); return n.getContext("2d").getImageData(0, 0, n.width, n.height).data; }); } function Qt(e, t) { return S(this, null, function* () { return P( yield N(e, R(T({}, t), { type: "image/png" })) ); }); } function Zt(e, t) { return S(this, null, function* () { return P( yield N(e, R(T({}, t), { type: "image/webp" })) ); }); } ;// CONCATENATED MODULE: ./src/index.ts var src_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var src_generator = (undefined && undefined.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; /** * 修改版 * * 适配关注推送时间线,用户时间线 * 按钮改为鼠标悬停才显示,绝对定位,减少侵入 * 代码风格:大部分改为空格缩进、无分号 * * 优化逻辑与性能,减少多余操作: * 无限循环改为每3秒监听滚动 * 点击按钮后才开始处理内容 * * 文件名添加作者名、时间 * 保存为HTML/PNG * 适配复杂的想法:转发、带卡片链接、带@ * * * 页:推送页,个人主页,回答页,问题页,文章页,想法页,收藏夹页 */ /** * 下一步 * 剪藏,显示与预期不一致问题:点赞栏、专栏 * 添加ip属地 * * 路线图 * * 03-原版 * 04-接手 * 05-截图 * 054-想法 * 06-想法完全支持 * 07-zip添加评论 * 071-测试 * 072-预发布 * 073-修复文章截图 * * 10-完全测试所有场景+类型 * -评论md解析 * -md添加frontmatter * -快捷键 * -按钮节流 * * */ var main = function () { return src_awaiter(void 0, void 0, void 0, function () { var RichTexts, _loop_1, _i, RichTexts_1, RichText; return src_generator(this, function (_a) { console.log("Starting…"); RichTexts = Array.from(document.querySelectorAll(".RichText")); _loop_1 = function (RichText) { try { var result_1; //console.log(RichText) if (RichText.parentElement.classList.contains("Editable")) return "continue"; if (window.location.hostname.match(/zhuanlan/)) { if (getParent(RichText, "Post-Main").querySelector(".zhihubackup-container")) return "continue"; } else { if (getParent(RichText, "PinItem")) { if (!getParent(RichText, "RichContent-inner")) return "continue"; //每个带图想法有3个RichText,除掉图、假转发 //if (RichText.children[0].classList.contains("Image-Wrapper-Preview")) continue if (getParent(RichText, "PinItem-content-originpin")) return "continue"; //被转发想法 } if (getParent(RichText, "RichContent").querySelector(".zhihubackup-container")) return "continue"; var richInner = getParent(RichText, "RichContent-inner"); if (richInner && richInner.querySelector(".ContentItem-more")) return "continue"; //未展开 if (getParent(RichText, "RichContent").querySelector(".ContentItem-expandButton")) return "continue"; } var ButtonContainer = document.createElement("div"); var p = getParent(RichText, "RichContent") || getParent(RichText, "Post-RichTextContainer"); ButtonContainer.classList.add("zhihubackup-wrap"); p.prepend(ButtonContainer); //父级 var parent_dom_1 = getParent(RichText, "List-item") || getParent(RichText, "Post-content") || getParent(RichText, "PinItem") || getParent(RichText, "CollectionDetailPageItem") || getParent(RichText, "Card"); //按钮们 ButtonContainer.innerHTML = "
\n \n \n \n \n
"; if (parent_dom_1.querySelector('.Catalog')) { ButtonContainer.firstElementChild.style.position = 'fixed'; ButtonContainer.firstElementChild.style.top = 'unset'; ButtonContainer.firstElementChild.style.bottom = '60px'; } var ButtonMarkdown_1 = parent_dom_1.querySelector(".to-md"); ButtonMarkdown_1.addEventListener("click", throttle(function () { return src_awaiter(void 0, void 0, void 0, function () { var res, e_1; return src_generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, , 3]); return [4 /*yield*/, dealItem(RichText, 'copy')]; case 1: res = _a.sent(); result_1 = { markdown: res.markdown, zip: res.zip, title: res.title, }; /*console.log(result.markdown.join("\n\n"))*/ navigator.clipboard.writeText(result_1.markdown.join("\n\n")); ButtonMarkdown_1.innerHTML = "复制成功✅"; setTimeout(function () { ButtonMarkdown_1.innerHTML = "复制为Markdown"; }, 3000); return [3 /*break*/, 3]; case 2: e_1 = _a.sent(); console.log(e_1); ButtonMarkdown_1.innerHTML = "发生错误❌
请打开控制台查看"; setTimeout(function () { ButtonMarkdown_1.innerHTML = "复制为Markdown"; }, 3000); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); })); var ButtonZip_1 = parent_dom_1.querySelector(".to-zip"); ButtonZip_1.addEventListener("click", throttle(function () { return src_awaiter(void 0, void 0, void 0, function () { var res, blob, e_2; return src_generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 3, , 4]); return [4 /*yield*/, dealItem(RichText, 'zip')]; case 1: res = _a.sent(); result_1 = { zip: res.zip, title: res.title, }; return [4 /*yield*/, result_1.zip.generateAsync({ type: "blob" })]; case 2: blob = _a.sent(); (0,FileSaver_min.saveAs)(blob, result_1.title + ".zip"); ButtonZip_1.innerHTML = "下载成功✅
请看下载记录"; setTimeout(function () { ButtonZip_1.innerHTML = "下载为Zip"; }, 5000); return [3 /*break*/, 4]; case 3: e_2 = _a.sent(); console.log(e_2); ButtonZip_1.innerHTML = "发生错误❌
请打开控制台查看"; setTimeout(function () { ButtonZip_1.innerHTML = "下载为Zip"; }, 5000); return [3 /*break*/, 4]; case 4: return [2 /*return*/]; } }); }); })); var ButtonPNG_1 = parent_dom_1.querySelector(".to-png"); ButtonPNG_1.addEventListener("click", throttle(function () { return src_awaiter(void 0, void 0, void 0, function () { var res, clip_1, saveCM_1, svgDefs, e_3; return src_generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, , 3]); return [4 /*yield*/, dealItem(RichText, 'png')]; case 1: res = _a.sent(); result_1 = { title: res.title, }; clip_1 = parent_dom_1; clip_1.classList.add("to-screenshot"); saveCM_1 = getCommentSwitch(RichText); !saveCM_1 ? clip_1.classList.add("no-cm") : 0; svgDefs = document.querySelector("#MathJax_SVG_glyphs"); svgDefs ? svgDefs.style.visibility = "visible" : 0; Qt(clip_1, { backgroundColor: "#fff" }).then(function (dataUrl) { var link = document.createElement('a'); link.download = result_1.title + ".png"; link.href = dataUrl; link.click(); setTimeout(function () { clip_1.classList.remove("to-screenshot"); !saveCM_1 ? clip_1.classList.remove("no-cm") : 0; //svgDefs2.remove() ButtonPNG_1.innerHTML = "剪藏为PNG"; }, 5000); }); ButtonPNG_1.innerHTML = "请稍待片刻✅
查看下载记录"; return [3 /*break*/, 3]; case 2: e_3 = _a.sent(); console.log(e_3); ButtonPNG_1.innerHTML = "发生错误❌
请打开控制台查看"; setTimeout(function () { ButtonPNG_1.innerHTML = "剪藏为PNG"; }, 5000); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); })); /* const ButtonGetFileName = parent_dom.querySelector(".to-cfn") ButtonGetFileName.addEventListener("click", async () => { try { const res = await NormalItem(RichText, true) result = { title: res.title, } navigator.clipboard.writeText(result.title) ButtonGetFileName.innerHTML = "复制成功✅" setTimeout(() => { ButtonGetFileName.innerHTML = "复制文件名" }, 5000) } catch (e) { console.log(e) ButtonGetFileName.innerHTML = "发生错误❌
请打开控制台查看" setTimeout(() => { ButtonGetFileName.innerHTML = "复制文件名" }, 5000) } }) */ } catch (e) { console.log(e); } }; for (_i = 0, RichTexts_1 = RichTexts; _i < RichTexts_1.length; _i++) { RichText = RichTexts_1[_i]; _loop_1(RichText); } return [2 /*return*/]; }); }); }; function throttle(fn, delay) { var flag = true; delay ? 0 : delay = 1000; return function () { if (flag) { flag = false; setTimeout(function () { flag = true; }, delay); return fn(); } }; } setTimeout(function () { var node = document.createElement("style"); //!important node.appendChild(document.createTextNode("\n .RichContent {\n position: relative;\n }\n .RichContent:hover .zhihubackup-wrap,\n .Post-RichTextContainer:hover .zhihubackup-wrap{\n opacity: 1;\n pointer-events: initial;\n }\n .zhihubackup-wrap {\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.5s;\n position: absolute;\n left: -10em;\n top: -50px;\n height: 100%;\n z-index: 2;\n }\n .zhihubackup-container {\n position: sticky;\n top: 120px;\n /*display: flex;\n flex-direction: column;\n justify-content: space-around;\n height: 22em;*/\n width: 12em;\n }\n .zhihubackup-container button {\n width: 8em;\n margin-bottom: 8px;\n line-height: 32px!important;\n }\n .zhihubackup-container input{\n /*border: 1px solid #777;*/\n background-color: #0000;\n font-size: 14px;\n color: #1772f6;\n border: unset;\n text-align: center;\n outline: unset; \n }\n .to-screenshot .ContentItem-actions {\n position: initial!important;\n box-shadow: unset!important;\n margin: 0 -20px -10px!important;\n }\n .to-screenshot.Post-content .RichContent-actions {\n position: initial!important;/*\u4E13\u680F*/\n box-shadow: unset!important;\n }\n .to-screenshot.Post-content {\n width: 780px;\n margin: 0 auto;\n min-width: unset!important;\n }\n .to-screenshot .Post-Main {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n .to-screenshot.PinItem .RichText>.RichText:has(a[data-first-child]) {\n display: flex;/*\u60F3\u6CD5-\u5361\u7247\u94FE\u63A5*/\n flex-direction: column;\n align-items: center;\n }\n .to-screenshot .ContentItem-actions>.ContentItem-actions {\n margin-top: -10px!important;/*\u60F3\u6CD5*/\n }\n .to-screenshot .css-m4psdq{\n opacity: 0;\n }\n .to-screenshot .AppHeader-profileAvatar{\n opacity: 0;\n }\n .to-screenshot.no-cm .Comments-container{\n display: none;\n }\n .to-screenshot noscript{\n display: none;\n }\n .to-screenshot .RichText-LinkCardContainer{\n display: flex;\n justify-content: center;\n }\n .to-screenshot .LinkCard.new{\n margin: 0!important;\n }\n .to-screenshot.PinItem{\n margin: 16px 0;/*\u60F3\u6CD5\u589E\u52A0\u7559\u767D*/\n padding: 0 16px;\n width: 690px;\n }\n .PinDetail:has(.to-screenshot){\n max-width: 706px!important;\n }\n .to-screenshot .Recommendations-Main{\n display: none;/*\u6587\u7AE0\u63A8\u8350\u9605\u8BFB*/\n }\n .to-screenshot .css-kt4t4n{\n display: none;/*\u4E0B\u65B9\u9ECF\u6027\u8BC4\u8BBA\u680F*/\n }\n .to-screenshot .zhihubackup-container{\n /*display: none;*/\n }\n")); var heads = document.getElementsByTagName("head"); if (heads.length > 0) { heads[0].appendChild(node); } else { document.documentElement.appendChild(node); } }, 30); setTimeout(main, 300); var timer = null; window.addEventListener("scroll", function () { //debounce if (timer) { clearTimeout(timer); } timer = setTimeout(main, 2000); }); ;// CONCATENATED MODULE: ./src/entry.ts })(); /******/ })() ;