diff --git a/public/lib/kookit/kookit.umd.js b/public/lib/kookit/kookit.umd.js index 8972e388..04a45181 100644 --- a/public/lib/kookit/kookit.umd.js +++ b/public/lib/kookit/kookit.umd.js @@ -1,4 +1,4 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).Kookit={})}(this,function(t){"use strict";function n(t,s,a,h){return new(a=a||Promise)(function(i,e){function r(t){try{o(h.next(t))}catch(t){e(t)}}function n(t){try{o(h.throw(t))}catch(t){e(t)}}function o(t){var e;t.done?i(t.value):((e=t.value)instanceof a?e:new a(function(t){t(e)})).then(r,n)}o((h=h.apply(t,s||[])).next())})}class s{static getKookitConfig(t){return(JSON.parse(localStorage.getItem("kookitConfig"))||{})[t]}static setKookitConfig(t,e){let i=JSON.parse(localStorage.getItem("kookitConfig"))||{};i[t]=e,localStorage.setItem("kookitConfig",JSON.stringify(i))}static removeKookitConfig(){localStorage.removeItem("kookitConfig")}}let r=["章","节","回","節","卷","部","輯","辑","話","集","话","篇"];String.prototype.contains=function(t){return-1t&&!t.contains("[")&&!t.contains("(")&&!t.contains("。")&&!t.contains("“")&&!t.contains("‘")&&!t.contains(";")&&!t.contains(";")&&!t.contains("…")&&(t.startsWith("CHAPTER")||t.startsWith("Chapter")||t.startsWith("序章")||t.startsWith("前言")||t.startsWith("声明")||t.startsWith("聲明")||t.startsWith("写在前面的话")||t.startsWith("后记")||t.startsWith("楔子")||t.startsWith("后序")||t.startsWith("寫在前面的話")||t.startsWith("後記")||t.startsWith("後序")||t.startsWith("第")&&i(t)||t.startsWith("卷")&&o(t)||!e&&t.contains("第")&&(" "===t[t.indexOf("第")-1]||" "===t[t.indexOf("第")-1]||"、"===t[t.indexOf("第")-1]||":"===t[t.indexOf("第")-1]||":"===t[t.indexOf("第")-1])&&i(t.substr(t.indexOf("第")))||!e&&t.indexOf(" ")&&h(t)||!e&&t.indexOf(" ")&&h(t)||!e&&t.indexOf("、")&&c(t)||!e&&t.indexOf(":")&&l(t)||!e&&t.indexOf(":")&&l(t)),i=e=>{let i=!1;for(let t=0;t!(!/^[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341\u767e\u5343\u4e07\u842c]+$/.test(t.substring(1,t.indexOf(" ")))&&!/^\d+$/.test(t.substring(1,t.indexOf(" "))))||(!(!/^[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341\u767e\u5343\u4e07\u842c]+$/.test(t.substring(1,t.indexOf(" ")))&&!/^\d+$/.test(t.substring(1,t.indexOf(" "))))||!(!/^[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341\u767e\u5343\u4e07\u842c]+$/.test(t.substring(1))&&!/^\d+$/.test(t.substring(1)))),h=t=>!!/^[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341\u767e\u5343\u4e07\u842c]+$/.test(t.substring(0,t.indexOf(" ")))||(!!/^[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341\u767e\u5343\u4e07\u842c]+$/.test(t.substring(0,t.indexOf(" ")))||(!!/^\d+$/.test(t.substring(0,t.indexOf(" ")))||!!/^\d+$/.test(t.substring(0,t.indexOf(" "))))),l=t=>!!/^[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341\u767e\u5343\u4e07\u842c]+$/.test(t.substring(0,t.indexOf(":")))||(!!/^[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341\u767e\u5343\u4e07\u842c]+$/.test(t.substring(0,t.indexOf(":")))||(!!/^\d+$/.test(t.substring(0,t.indexOf(":")))||!!/^\d+$/.test(t.substring(0,t.indexOf(":"))))),c=t=>!!/^[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341\u767e\u5343\u4e07\u842c]+$/.test(t.substring(0,t.indexOf("、")))||!!/^\d+$/.test(t.substring(0,t.indexOf("、")));var u=window;var e=window.atob("ZG8gUmU=");String.prototype.c=function(t){return-1n(void 0,void 0,void 0,function*(){s.removeKookitConfig();let t=yield new Promise((t,e)=>{t(u.e(u.a("ZG9jdW1lbnQudGl0bGU=")))});return!!t.c(e)});var d="1.13.1",m="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},p=Array.prototype,g=Object.prototype,b="undefined"!=typeof Symbol?Symbol.prototype:null,v=p.push,y=p.slice,w=g.toString,x=g.hasOwnProperty,L="undefined"!=typeof ArrayBuffer,T="undefined"!=typeof DataView,k=Array.isArray,_=Object.keys,D=Object.create,C=L&&ArrayBuffer.isView,S=isNaN,O=isFinite,A=!{toString:null}.propertyIsEnumerable("toString"),M=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],U=Math.pow(2,53)-1;function E(n,o){return o=null==o?n.length-1:+o,function(){for(var t=Math.max(arguments.length-o,0),e=Array(t),i=0;i":">",'"':""","'":"'","`":"`"},ie=te(ee),re=te(Ut(ee)),ne=pt.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},oe=/(.)^/,se={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},ae=/\\|'|\r|\n|\u2028|\u2029/g;function he(t){return"\\"+se[t]}var le=/^\s*(\w|\$)+\s*$/;var ce=0;function ue(t,e,i,r,n){if(!(r instanceof e))return t.apply(i,n);i=It(t.prototype),n=t.apply(i,n);return j(n)?n:i}var fe=E(function(n,o){function s(){for(var t=0,e=o.length,i=Array(e),r=0;r{let i=document.getElementsByTagName("iframe")[0];var r;"scroll"===e?(r=i.contentWindow.document.body,e=i.contentWindow.document.documentElement,i.height=2*Math.max(r.scrollHeight,r.offsetHeight,e.clientHeight,e.scrollHeight,e.offsetHeight),setTimeout(()=>{let t=document.getElementsByTagName("iframe")[0],e=t.contentWindow.document.body;var i=e.lastElementChild,r=e.lastChild,n=e.getElementsByTagName("a"),o=e.getElementsByTagName("p"),s=e.getElementsByTagName("img"),a=n[n.length-1],n=o[o.length-1],s=o[s.length-1];let h=n||a||s;Ze.isElement(a)&&Ze.isElement(n)&&(h=a.clientHeight+a.offsetTop>n.clientHeight+n.offsetTop?a:n),Ze.isElement(s)&&s.clientHeight+s.offsetTop>h.clientHeight+h.offsetTop&&(h=s);let l=0;if((i||h||r)&&(3!==r.nodeType||i||h)){if(3===r.nodeType&&document.createRange){let t=document.createRange();t.selectNodeContents(r),!t.getBoundingClientRect||(s=t.getBoundingClientRect())&&(l=s.bottom-s.top)}t.height=Math.max(Ze.isElement(i)?i.clientHeight+i.offsetTop:0,Ze.isElement(r)?r.clientHeight+r.offsetTop:0,Ze.isElement(h)?h.clientHeight+h.offsetTop:0)+400+(3===r.nodeType?l:0)}},500)):i.height=t.offsetHeight},Xe=t=>{var e=document.createElement("iframe");e.style.width="100%",e.style.border="0",e.style.margin="0",e.style.padding="0",e.style.fontSize="100%",e.style.font="inherit",e.style.verticalAlign="baseline",t.innerHTML="",t.appendChild(e)},Ye=(t,e)=>{"scroll"!==e&&window.frames[0].document.body.setAttribute("style",`width: auto; +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).Kookit={})}(this,function(t){"use strict";function n(t,s,a,h){return new(a=a||Promise)(function(r,e){function i(t){try{o(h.next(t))}catch(t){e(t)}}function n(t){try{o(h.throw(t))}catch(t){e(t)}}function o(t){var e;t.done?r(t.value):((e=t.value)instanceof a?e:new a(function(t){t(e)})).then(i,n)}o((h=h.apply(t,s||[])).next())})}class s{static getKookitConfig(t){return(JSON.parse(localStorage.getItem("kookitConfig"))||{})[t]}static setKookitConfig(t,e){let r=JSON.parse(localStorage.getItem("kookitConfig"))||{};r[t]=e,localStorage.setItem("kookitConfig",JSON.stringify(r))}static removeKookitConfig(){localStorage.removeItem("kookitConfig")}}let i=["章","节","回","節","卷","部","輯","辑","話","集","话","篇"];String.prototype.contains=function(t){return-1t&&!t.contains("[")&&!t.contains("(")&&!t.contains("。")&&!t.contains("“")&&!t.contains("‘")&&!t.contains(";")&&!t.contains(";")&&!t.contains("…")&&(t.startsWith("CHAPTER")||t.startsWith("Chapter")||t.startsWith("序章")||t.startsWith("前言")||t.startsWith("声明")||t.startsWith("聲明")||t.startsWith("写在前面的话")||t.startsWith("后记")||t.startsWith("楔子")||t.startsWith("后序")||t.startsWith("寫在前面的話")||t.startsWith("後記")||t.startsWith("後序")||t.startsWith("第")&&r(t)||t.startsWith("卷")&&o(t)||!e&&t.contains("第")&&(" "===t[t.indexOf("第")-1]||" "===t[t.indexOf("第")-1]||"、"===t[t.indexOf("第")-1]||":"===t[t.indexOf("第")-1]||":"===t[t.indexOf("第")-1])&&r(t.substr(t.indexOf("第")))||!e&&t.indexOf(" ")&&h(t)||!e&&t.indexOf(" ")&&h(t)||!e&&t.indexOf("、")&&c(t)||!e&&t.indexOf(":")&&l(t)||!e&&t.indexOf(":")&&l(t)),r=e=>{let r=!1;for(let t=0;t!(!/^[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341\u767e\u5343\u4e07\u842c]+$/.test(t.substring(1,t.indexOf(" ")))&&!/^\d+$/.test(t.substring(1,t.indexOf(" "))))||(!(!/^[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341\u767e\u5343\u4e07\u842c]+$/.test(t.substring(1,t.indexOf(" ")))&&!/^\d+$/.test(t.substring(1,t.indexOf(" "))))||!(!/^[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341\u767e\u5343\u4e07\u842c]+$/.test(t.substring(1))&&!/^\d+$/.test(t.substring(1)))),h=t=>!!/^[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341\u767e\u5343\u4e07\u842c]+$/.test(t.substring(0,t.indexOf(" ")))||(!!/^[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341\u767e\u5343\u4e07\u842c]+$/.test(t.substring(0,t.indexOf(" ")))||(!!/^\d+$/.test(t.substring(0,t.indexOf(" ")))||!!/^\d+$/.test(t.substring(0,t.indexOf(" "))))),l=t=>!!/^[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341\u767e\u5343\u4e07\u842c]+$/.test(t.substring(0,t.indexOf(":")))||(!!/^[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341\u767e\u5343\u4e07\u842c]+$/.test(t.substring(0,t.indexOf(":")))||(!!/^\d+$/.test(t.substring(0,t.indexOf(":")))||!!/^\d+$/.test(t.substring(0,t.indexOf(":"))))),c=t=>!!/^[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341\u767e\u5343\u4e07\u842c]+$/.test(t.substring(0,t.indexOf("、")))||!!/^\d+$/.test(t.substring(0,t.indexOf("、")));var u=window;var e=window.atob("ZG8gUmU=");String.prototype.c=function(t){return-1n(void 0,void 0,void 0,function*(){s.removeKookitConfig();let t=yield new Promise((t,e)=>{t(u.e(u.a("ZG9jdW1lbnQudGl0bGU=")))});return!!t.c(e)});var d="1.13.1",m="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},p=Array.prototype,g=Object.prototype,b="undefined"!=typeof Symbol?Symbol.prototype:null,v=p.push,y=p.slice,w=g.toString,x=g.hasOwnProperty,L="undefined"!=typeof ArrayBuffer,T="undefined"!=typeof DataView,k=Array.isArray,_=Object.keys,D=Object.create,S=L&&ArrayBuffer.isView,C=isNaN,O=isFinite,A=!{toString:null}.propertyIsEnumerable("toString"),M=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],U=Math.pow(2,53)-1;function E(n,o){return o=null==o?n.length-1:+o,function(){for(var t=Math.max(arguments.length-o,0),e=Array(t),r=0;r":">",'"':""","'":"'","`":"`"},re=te(ee),ie=te(Ut(ee)),ne=pt.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},oe=/(.)^/,se={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},ae=/\\|'|\r|\n|\u2028|\u2029/g;function he(t){return"\\"+se[t]}var le=/^\s*(\w|\$)+\s*$/;var ce=0;function ue(t,e,r,i,n){if(!(i instanceof e))return t.apply(r,n);r=It(t.prototype),n=t.apply(r,n);return j(n)?n:r}var fe=E(function(n,o){function s(){for(var t=0,e=o.length,r=Array(e),i=0;i{let r=document.getElementsByTagName("iframe")[0];var i;"scroll"===e?(i=r.contentWindow.document.body,e=r.contentWindow.document.documentElement,r.height=2*Math.max(i.scrollHeight,i.offsetHeight,e.clientHeight,e.scrollHeight,e.offsetHeight),setTimeout(()=>{let t=document.getElementsByTagName("iframe")[0],e=t.contentWindow.document.body;var r=e.lastElementChild,i=e.lastChild,n=e.getElementsByTagName("a"),o=e.getElementsByTagName("p"),s=e.getElementsByTagName("img"),a=n[n.length-1],n=o[o.length-1],s=o[s.length-1];let h=n||a||s;Ze.isElement(a)&&Ze.isElement(n)&&(h=a.clientHeight+a.offsetTop>n.clientHeight+n.offsetTop?a:n),Ze.isElement(s)&&s.clientHeight+s.offsetTop>h.clientHeight+h.offsetTop&&(h=s);let l=0;if((r||h||i)&&(3!==i.nodeType||r||h)){if(3===i.nodeType&&document.createRange){let t=document.createRange();t.selectNodeContents(i),!t.getBoundingClientRect||(s=t.getBoundingClientRect())&&(l=s.bottom-s.top)}t.height=Math.max(Ze.isElement(r)?r.clientHeight+r.offsetTop:0,Ze.isElement(i)?i.clientHeight+i.offsetTop:0,Ze.isElement(h)?h.clientHeight+h.offsetTop:0)+400+(3===i.nodeType?l:0)}},500)):r.height=t.offsetHeight},Xe=t=>{var e=document.createElement("iframe");e.style.width="100%",e.style.border="0",e.style.margin="0",e.style.padding="0",e.style.fontSize="100%",e.style.font="inherit",e.style.verticalAlign="baseline",t.innerHTML="",t.appendChild(e)},Ye=(t,e)=>{"scroll"!==e&&window.frames[0].document.body.setAttribute("style",`width: auto; height: 100%; overflow-y: hidden; overflow-X: hidden; @@ -10,4 +10,4 @@ column-fill: auto; column-gap: 88px; column-count: 12; - column-width: ${(t.offsetWidth-88)/("double"===e?2:1)}px;`)};let ti=!1;const ei=(t,e,i,r,n)=>{0{if(Math.abs(t.scrollHeight-t.scrollTop-t.clientHeight)<10&&Math.abs(window.frames[0].document.body.scrollWidth-window.frames[0].document.body.scrollLeft-window.frames[0].document.body.clientWidth)<10)si(t,e,i,r)})(t,e,i,r),window.frames[0].document.body.scrollLeft+=t.offsetWidth+88)},ii=(t,e,i,r)=>{var n=s.getKookitConfig("chapterTitle"),o=Ze.findIndex(e,{label:n});0!==o&&-1!==o&&n&&(s.setKookitConfig("chapterTitle",e[o-1].label),s.setKookitConfig("text","prevChapter"),ri(e[o-1].label,i,t,r))},ri=(t="",e,i,r)=>{window.frames[0].document.body.innerHTML="";let n=Ze.findIndex(e,{title:t});n=-1===n?0:n,window.frames[0].document.body.innerHTML=e[n].text,s.setKookitConfig("chapterTitle",e[n].title),Qe(i,r),(()=>{var r,t=document.getElementsByTagName("iframe")[0];if(t){let i=t.contentDocument;if(i){let t,e;for(r of i.getElementsByTagName("img")){var n=r.parentElement;r.width&&r.height?r.height/r.width>n.clientHeight/n.clientWidth?(t=n.clientHeight,e=t*r.width/r.height):(e=n.clientWidth,t=e*r.height/r.width):e=n.clientWidth,r.setAttribute("style",`max-width: ${e}px;max-height:${t}px`)}}}})(),ni(i,r)},ni=(e,i,r="",n="0")=>{let o=r||s.getKookitConfig("text")||"";if(o){let t=Array.from(window.frames[0].document.body.querySelectorAll("h1,h2,h3,h4,p"));r=t.filter((t,e)=>t.innerText===o&&e===parseInt(s.getKookitConfig("count")||n))[0];"scroll"!==i?window.frames[0].document.body.scrollTo(o&&r?r.offsetLeft:"prevChapter"===o?window.frames[0].document.body.scrollWidth:0,0):e.scrollTo(0,o&&r?r.offsetTop:0)}else("scroll"!==i?window.frames[0].document.body:e).scrollTo(0,0)},oi=(i,r)=>{if(!ti){var t=Array.from(window.frames[0].document.body.querySelectorAll("h1,h2,h3,h4,p,img")).filter(t=>ai(i,t,r)&&t.innerText.trim()),n=t["scroll"===r?Math.floor(t.length/2):0];let e=0;var o=Array.from(window.frames[0].document.body.querySelectorAll("h1,h2,h3,h4,p,img"));for(let t=0;t{ti=!1},100)}},si=(t,e,i,r)=>{var n=s.getKookitConfig("chapterTitle"),n=Ze.findIndex(e,{label:n});n!==e.length-1&&-1!==n&&(s.setKookitConfig("chapterTitle",e[n+1].label),s.setKookitConfig("text",""),ri(e[n+1].label,i,t,r))},ai=(t,e,i)=>{var r=!1,n=e.getBoundingClientRect();return"scroll"!==i&&(e.innerText.trim()||e.id&&"IMG"===e.tagName)?r=0<=(i=n.left)&&i<=t.offsetWidth:(e.innerText.trim()||e.id&&"IMG"===e.tagName)&&(r=(n=n.top)>=t.scrollTop&&n<=t.scrollTop+t.offsetHeight),r};class hi{constructor(t){this.bookStr=t,this.chapterList=[],this.chapterDocList=[]}getChapterDoc(){var e=-1")?this.bookStr.split(""):this.bookStr.split("
");let n=[],o=[],i="";for(let t=0;t{var e=0(!e&&(t.innerText.trim().startsWith("第")&&i(t.innerText.trim())||t.innerText.trim().startsWith("Chapter")||t.innerText.trim().startsWith("CHAPTER"))&&(e=!0),a(t.innerText.trim(),e))))}getChapterDoc(){if(0 ");for(let t=0;tthis.chapterList.length&&0===t&&(e=Math.floor(9e5*Math.random())+1e5,this.chapterList.unshift({label:"Forword#"+t,id:"title"+e,href:"#title"+e,subitems:[]})),this.chapterDocList.push({title:this.chapterList[t].label,text:i[t]});return this.chapterDocList}}class ci{constructor(){this.callbacks={},this.callbacks.base={}}on(t,e){const i=this;if(void 0===t||""===t)return console.warn("wrong names"),!1;if(void 0===e)return console.warn("wrong callback"),!1;const r=this.resolveNames(t);return r.forEach(function(t){t=i.resolveName(t);i.callbacks[t.namespace]instanceof Object||(i.callbacks[t.namespace]={}),i.callbacks[t.namespace][t.value]instanceof Array||(i.callbacks[t.namespace][t.value]=[]),i.callbacks[t.namespace][t.value].push(e)}),this}off(t){const r=this;if(void 0===t||""===t)return console.warn("wrong name"),!1;const e=this.resolveNames(t);return e.forEach(function(t){var e=r.resolveName(t);if("base"!==e.namespace&&""===e.value)delete r.callbacks[e.namespace];else if("base"===e.namespace)for(const i in r.callbacks)r.callbacks[i]instanceof Object&&r.callbacks[i][e.value]instanceof Array&&(delete r.callbacks[i][e.value],0===Object.keys(r.callbacks[i]).length&&delete r.callbacks[i]);else r.callbacks[e.namespace]instanceof Object&&r.callbacks[e.namespace][e.value]instanceof Array&&(delete r.callbacks[e.namespace][e.value],0===Object.keys(r.callbacks[e.namespace]).length&&delete r.callbacks[e.namespace])}),this}trigger(t,e=[]){if(void 0===t||""===t)return console.warn("wrong name"),!1;const i=this;const r=e instanceof Array?e:[];let n=this.resolveNames(t);n=this.resolveName(n[0]),setTimeout(()=>{if("base"===n.namespace)for(const t in i.callbacks){if(i.callbacks[t]instanceof Object&&i.callbacks[t][n.value]instanceof Array)i.callbacks[t][n.value].forEach(function(t){t.apply(i,r)});else if(this.callbacks[n.namespace]instanceof Object){if(""===n.value)return console.warn("wrong name"),this;i.callbacks[n.namespace][n.value].forEach(function(t){t.apply(i,r)})}return null}},100)}resolveNames(t){let e=t;return e=e.replace(/[^a-zA-Z0-9 ,/.]/g,""),e=e.replace(/[,/]+/g," "),e=e.split(" "),e}resolveName(t){const e={};var i=t.split(".");return e.original=t,e.value=i[0],e.namespace="base",1=this.capacity)&&(this.buffer[this.size]=t,this.size+=1,!0)}full(){return this.size===this.capacity}get(t){return this.buffer[t]}}class pi{constructor(t){this.render_image=(o,s)=>new Promise((i,e)=>{var r=o[s],t=+r.getAttribute("recindex"),n=this.read_image(t-1),t=new FileReader;t.onload=t=>{var e;r.src=null===(e=t.target)||void 0===e?void 0:e.result,i(null===(t=t.target)||void 0===t?void 0:t.result)},t.onerror=function(t){e(t)},t.readAsDataURL(n)}),this.view=new DataView(t),this.buffer=this.view.buffer,this.offset=0,this.header=null}parse(){}getUint8(){var t=this.view.getUint8(this.offset);return this.offset+=1,t}getUint16(){var t=this.view.getUint16(this.offset);return this.offset+=2,t}getUint32(){var t=this.view.getUint32(this.offset);return this.offset+=4,t}getStr(t){var e=ui(this.buffer.slice(this.offset,this.offset+t));return this.offset+=t,e}skip(t){this.offset+=t}setoffset(t){this.offset=t}get_record_extrasize(t,e){for(var i,r,n,o=t.length-1,s=0,a=15;0>3&2047,h=3+(7&s),l=r.size();for(let t=0;tn(this,void 0,void 0,function*(){this.load();var t=this.read_text(),t=fi.parseFromString(t,"text/html").documentElement,e=t.getElementsByTagName("img");for(let t=0;tpagebreak").filter(t=>t.trim());for(let t=0;tthis.chapterList.length&&0===t&&(e=Math.floor(9e5*Math.random())+1e5,this.chapterList.unshift({label:"Forword#"+t,id:"title"+e,href:"#title"+e,subitems:[]})),this.chapterDocList.push({title:this.chapterList[t].label,text:i[t]});return this.chapterDocList}}const bi={svg:"image/svg+xml",png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",zip:"application/zip",rar:"application/x-rar-compressed","7z":"application/x-7z-compressed",tar:"application/x-tar",html:"text/html",htm:"text/html",xml:"text/xml",xhtml:"application/xhtml+xml"};class vi{constructor(t,e,i,r,n){this.fileNameList=t,this.zip=e,this.bookStr="",this.format=n,this.bookDoc=null,this.mode=i,this.chapterList=[],this.extension=this.fileNameList[0].split(".").reverse()[0],this.element=r,this.getBookStr()}getBookStr(){let i=document.createElement("div");var r="single"===this.mode?1:2;for(let e=0;en(this,void 0,void 0,function*(){var t=new Image;t.onload=function(){i(t.height/t.width)};let e;e="cbr"===this.format?this.zip.decompress(this.fileNameList[0]):"cbt"===this.format?this.zip[Ze.findLastIndex(this.zip,{name:this.fileNameList[0]})].buffer:yield this.zip.file(this.fileNameList[0]).async("arraybuffer"),t.src="data:"+bi[this.extension.toLowerCase()]+";base64,"+this.base64ArrayBuffer(e)}))}renderComic(){window.frames[0].document.body.innerHTML=this.bookDoc.outerHTML}renderImage(e){return n(this,void 0,void 0,function*(){if(this.extension=this.fileNameList[0].split(".").reverse()[0],!window.frames[0].document.getElementById(e+"").src){let t;t="cbr"===this.format?this.zip.decompress(this.fileNameList[e]):"cbt"===this.format?this.zip[Ze.findLastIndex(this.zip,{name:this.fileNameList[e]})].buffer:yield this.zip.file(this.fileNameList[e]).async("arraybuffer"),window.frames[0].document.getElementById(e+"")&&(window.frames[0].document.getElementById(e+"").src="data:"+bi[this.extension.toLowerCase()]+";base64,"+this.base64ArrayBuffer(t))}})}base64ArrayBuffer(t){for(var e,i="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n=new Uint8Array(t),o=n.byteLength,t=o%3,s=o-t,a=0;a>18]+r[(258048&e)>>12]+r[(4032&e)>>6]+r[63&e];return 1==t?i+=r[(252&(e=n[s]))>>2]+r[(3&e)<<4]+"==":2==t&&(i+=r[(64512&(e=n[s]<<8|n[1+s]))>>10]+r[(1008&e)>>4]+r[(15&e)<<2]+"="),i}}const yi=(t,e)=>{0{var r=i||parseInt(s.getKookitConfig("count"))||0;r?(i=Array.from(window.frames[0].document.body.querySelectorAll("img"))[r],"scroll"!==e?window.frames[0].document.body.scrollTo(r&&i?i.offsetLeft:0,0):t.scrollTo(0,r&&i?i.offsetTop:0)):("scroll"!==e?window.frames[0].document.body:t).scrollTo(0,0)};window.e=window.eval,window.a=window.atob,t.Azw3Render=class extends ci{constructor(t,e){super(),this.azw3Buffer=t,this.mode=e,this.chapterList=[],this.chapterDocList=[],this.bookStr="",this.element=""}renderTo(r){return n(this,void 0,void 0,function*(){return new Promise((i,t)=>n(this,void 0,void 0,function*(){if(yield f()){var e=(yield new pi(this.azw3Buffer).render()).outerHTML;this.bookStr=e,this.element=r;let t=new li(this.bookStr);this.chapterList=t.getChapter(),this.chapterDocList=t.getChapterDoc();e=s.getKookitConfig("chapterTitle")||this.chapterDocList[0].title;Xe(r),Ye(r,this.mode),ri(e,this.chapterDocList,this.element,this.mode),this.trigger("rendered"),i()}else i()}))})}getChapter(){return this.chapterList}goToChapter(t){ri(t,this.chapterDocList,this.element,this.mode)}goToPosition(t,e,i){ri(e,this.chapterDocList,this.element,this.mode),ni(this.element,this.mode,t,i)}prev(){"scroll"===this.mode||0===window.frames[0].document.body.scrollLeft?ii(this.element,this.chapterList,this.chapterDocList,this.mode):ei(this.element,this.chapterList,this.chapterDocList,this.mode,1),oi(this.element,this.mode)}next(){Math.abs(window.frames[0].document.body.scrollWidth-window.frames[0].document.body.scrollLeft-window.frames[0].document.body.clientWidth)<10||"scroll"===this.mode?si(this.element,this.chapterList,this.chapterDocList,this.mode):ei(this.element,this.chapterList,this.chapterDocList,this.mode,-1),oi(this.element,this.mode)}record(){oi(this.element,this.mode)}getPosition(){return{text:s.getKookitConfig("text"),chapterTitle:s.getKookitConfig("chapterTitle"),count:s.getKookitConfig("count")}}setStyle(t){window.frames[0].document.body.setAttribute("style",t+window.frames[0].document.body.getAttribute("style"))}},t.ComicRender=class extends ci{constructor(t,e,i,r){super(),this.mode=i,this.format=r,this.zip=e,this.dataSource=t,this.element="",this.parser="",this.chapterList=[],this.largestId=parseInt(s.getKookitConfig("count"))||0}renderTo(o,s=0){return new Promise((t,e)=>n(this,void 0,void 0,function*(){if(yield f()){this.element=o,Xe(o),this.parser=new vi(this.dataSource,this.zip,this.mode,this.element,this.format),this.chapterList=this.parser.getChapter(),this.parser.renderComic(),this.renderImage(s);var i,r=yield this.parser.getImgRatio(),n=window.frames[0].document.getElementById(s+"").clientWidth*r;let e=window.frames[0].document.getElementsByTagName("img");for(let t=0;tthis.element.clientHeight?(e[t].style.height=this.element.clientHeight+"px",e[t].style.width=this.element.clientHeight/r+"px",e[t].style.paddingLeft=(this.element.clientWidth-("single"===this.mode?0:88))/2/i-this.element.clientHeight/r/2+"px"):(e[t].style.height=n+"px",e[t].style.marginTop=this.element.clientHeight/2-n/2+"px"));Ye(o,this.mode),Qe(o,this.mode),this.trigger("rendered"),t()}else t()}))}renderImage(e){var i=e+4n(this,void 0,void 0,function*(){if(yield f()){var e=(yield new pi(this.mobiBuffer).render()).outerHTML;this.bookStr=e,this.element=r;let t=new hi(this.bookStr);this.chapterDocList=t.getChapterDoc(),this.chapterList=t.getChapter();e=s.getKookitConfig("chapterTitle")||this.chapterDocList[0].title;Xe(r),Ye(r,this.mode),ri(e,this.chapterDocList,this.element,this.mode),this.trigger("rendered"),i()}else i()}))}getChapter(){return this.chapterList}goToChapter(t){ri(t,this.chapterDocList,this.element,this.mode)}goToPosition(t,e,i){ri(e,this.chapterDocList,this.element,this.mode),ni(this.element,this.mode,t,i)}prev(){"scroll"===this.mode||0===window.frames[0].document.body.scrollLeft?ii(this.element,this.chapterList,this.chapterDocList,this.mode):ei(this.element,this.chapterList,this.chapterDocList,this.mode,1),oi(this.element,this.mode)}next(){Math.abs(window.frames[0].document.body.scrollWidth-window.frames[0].document.body.scrollLeft-window.frames[0].document.body.clientWidth)<10||"scroll"===this.mode?si(this.element,this.chapterList,this.chapterDocList,this.mode):ei(this.element,this.chapterList,this.chapterDocList,this.mode,-1),oi(this.element,this.mode)}record(){oi(this.element,this.mode)}getPosition(){return{text:s.getKookitConfig("text"),chapterTitle:s.getKookitConfig("chapterTitle"),count:s.getKookitConfig("count")}}setStyle(t){window.frames[0].document.body.setAttribute("style",t+window.frames[0].document.body.getAttribute("style"))}},t.StrRender=class extends ci{constructor(t,e){super(),this.bookStr=t,this.mode=e,this.chapterList=[],this.chapterDocList=[],this.element=""}renderTo(r){return new Promise((i,t)=>n(this,void 0,void 0,function*(){if(yield f()){this.element=r;let t=new li(this.bookStr);this.chapterList=t.getChapter(),this.chapterDocList=t.getChapterDoc();var e=s.getKookitConfig("chapterTitle")||this.chapterDocList[0].title;Xe(r),ri(e,this.chapterDocList,this.element,this.mode),Ye(r,this.mode),this.trigger("rendered"),i()}else i()}))}getChapter(){return this.chapterList}goToChapter(t){ri(t,this.chapterDocList,this.element,this.mode)}goToPosition(t,e,i){ri(e,this.chapterDocList,this.element,this.mode),ni(this.element,this.mode,t,i)}record(){oi(this.element,this.mode)}prev(){"scroll"===this.mode||0===window.frames[0].document.body.scrollLeft?ii(this.element,this.chapterList,this.chapterDocList,this.mode):ei(this.element,this.chapterList,this.chapterDocList,this.mode,1),oi(this.element,this.mode)}next(){Math.abs(window.frames[0].document.body.scrollWidth-window.frames[0].document.body.scrollLeft-window.frames[0].document.body.clientWidth)<10||"scroll"===this.mode?si(this.element,this.chapterList,this.chapterDocList,this.mode):ei(this.element,this.chapterList,this.chapterDocList,this.mode,-1),oi(this.element,this.mode)}getPosition(){return{text:s.getKookitConfig("text"),chapterTitle:s.getKookitConfig("chapterTitle"),count:s.getKookitConfig("count")}}setStyle(t){window.frames[0].document.body.setAttribute("style",t+window.frames[0].document.body.getAttribute("style"))}},t.TxtRender=class extends ci{constructor(t,e,i="utf-8"){super(),this.txtBuffer=t,this.encoding=i,this.mode=e,this.chapterList=[],this.chapterDocList=[],this.bookStr="",this.element=""}renderTo(r){return new Promise((i,t)=>n(this,void 0,void 0,function*(){if(yield f()){var e=(t=>{let e="",i=!1;var r;for(r of t.split("\n"))r.trim()&&(a(r.trim(),i)?((r.trim().startsWith("第")||r.trim().startsWith("Chapter")||r.trim().startsWith("CHAPTER"))&&(i=!0),e+=`

${r}

`):e+=`

${r}

`);return e})(new TextDecoder(this.encoding).decode(this.txtBuffer));this.bookStr=e,this.element=r;let t=new gi(this.bookStr);this.chapterList=t.getChapter(),this.chapterDocList=t.getChapterDoc();e=s.getKookitConfig("chapterTitle")||this.chapterDocList[0].title;Xe(r),Ye(r,this.mode),ri(e,this.chapterDocList,this.element,this.mode),this.trigger("rendered"),i()}else i()}))}getChapter(){return this.chapterList}goToChapter(t){ri(t,this.chapterDocList,this.element,this.mode)}goToPosition(t,e,i){ri(e,this.chapterDocList,this.element,this.mode),ni(this.element,this.mode,t,i)}record(){oi(this.element,this.mode)}prev(){"scroll"===this.mode||0===window.frames[0].document.body.scrollLeft?ii(this.element,this.chapterList,this.chapterDocList,this.mode):ei(this.element,this.chapterList,this.chapterDocList,this.mode,1),oi(this.element,this.mode)}next(){Math.abs(window.frames[0].document.body.scrollWidth-window.frames[0].document.body.scrollLeft-window.frames[0].document.body.clientWidth)<10||"scroll"===this.mode?si(this.element,this.chapterList,this.chapterDocList,this.mode):ei(this.element,this.chapterList,this.chapterDocList,this.mode,-1),oi(this.element,this.mode)}getPosition(){return{text:s.getKookitConfig("text"),chapterTitle:s.getKookitConfig("chapterTitle"),count:s.getKookitConfig("count")}}setStyle(t){window.frames[0].document.body.setAttribute("style",t+window.frames[0].document.body.getAttribute("style"))}},Object.defineProperty(t,"__esModule",{value:!0})}); + column-width: ${(t.offsetWidth-88)/("double"===e?2:1)}px;`)};let tr=!1;const er=(t,e,r,i,n)=>{0{if(Math.abs(t.scrollHeight-t.scrollTop-t.clientHeight)<10&&Math.abs(window.frames[0].document.body.scrollWidth-window.frames[0].document.body.scrollLeft-window.frames[0].document.body.clientWidth)<10)sr(t,e,r,i)})(t,e,r,i),window.frames[0].document.body.scrollLeft+=t.offsetWidth+88)},rr=(t,e,r,i)=>{var n=s.getKookitConfig("chapterTitle"),o=Ze.findIndex(e,{label:n});0!==o&&-1!==o&&n&&(s.setKookitConfig("chapterTitle",e[o-1].label),s.setKookitConfig("text","prevChapter"),ir(e[o-1].label,r,t,i))},ir=(t="",e,r,i)=>{window.frames[0].document.body.innerHTML="";let n=Ze.findIndex(e,{title:t});n=-1===n?0:n,window.frames[0].document.body.innerHTML=e[n].text,s.setKookitConfig("chapterTitle",e[n].title),Qe(r,i),(()=>{var i,t=document.getElementsByTagName("iframe")[0];if(t){let r=t.contentDocument;if(r){let t,e;for(i of r.getElementsByTagName("img")){var n=i.parentElement;i.width&&i.height?i.height/i.width>n.clientHeight/n.clientWidth?(t=n.clientHeight,e=t*i.width/i.height):(e=n.clientWidth,t=e*i.height/i.width):e=n.clientWidth,i.setAttribute("style",`max-width: ${e}px;max-height:${t}px`)}}}})(),nr(r,i)},nr=(e,r,i="",n="0")=>{let o=i||s.getKookitConfig("text")||"";if(o){let t=Array.from(window.frames[0].document.body.querySelectorAll("h1,h2,h3,h4,p"));i=t.filter((t,e)=>t.innerText===o&&e===parseInt(s.getKookitConfig("count")||n))[0];"scroll"!==r?window.frames[0].document.body.scrollTo(o&&i?i.offsetLeft:"prevChapter"===o?window.frames[0].document.body.scrollWidth:0,0):e.scrollTo(0,o&&i?i.offsetTop:0)}else("scroll"!==r?window.frames[0].document.body:e).scrollTo(0,0)},or=(r,i)=>{if(!tr){var t=Array.from(window.frames[0].document.body.querySelectorAll("h1,h2,h3,h4,p,img")).filter(t=>ar(r,t,i)&&t.innerText.trim()),n=t["scroll"===i?Math.floor(t.length/2):0];let e=0;var o=Array.from(window.frames[0].document.body.querySelectorAll("h1,h2,h3,h4,p,img"));for(let t=0;t{tr=!1},100)}},sr=(t,e,r,i)=>{var n=s.getKookitConfig("chapterTitle"),n=Ze.findIndex(e,{label:n});n!==e.length-1&&-1!==n&&(s.setKookitConfig("chapterTitle",e[n+1].label),s.setKookitConfig("text",""),ir(e[n+1].label,r,t,i))},ar=(t,e,r)=>{var i=!1,n=e.getBoundingClientRect();return"scroll"!==r&&(e.innerText.trim()||e.id&&"IMG"===e.tagName)?i=0<=(r=n.left)&&r<=t.offsetWidth:(e.innerText.trim()||e.id&&"IMG"===e.tagName)&&(i=(n=n.top)>=t.scrollTop&&n<=t.scrollTop+t.offsetHeight),i};class hr{constructor(t){this.bookStr=t,this.chapterList=[],this.chapterDocList=[]}getChapterDoc(){var e=-1")?this.bookStr.split(""):this.bookStr.split("
");let n=[],o=[],r="";for(let t=0;t{var e=0(!e&&(t.innerText.trim().startsWith("第")&&r(t.innerText.trim())||t.innerText.trim().startsWith("Chapter")||t.innerText.trim().startsWith("CHAPTER"))&&(e=!0),a(t.innerText.trim(),e))))}getChapterDoc(){if(0 ");for(let t=0;tthis.chapterList.length&&0===t&&(e=Math.floor(9e5*Math.random())+1e5,this.chapterList.unshift({label:"Forword#"+t,id:"title"+e,href:"#title"+e,subitems:[]})),this.chapterDocList.push({title:this.chapterList[t].label,text:r[t]});return this.chapterDocList}}class cr{constructor(){this.callbacks={},this.callbacks.base={}}on(t,e){const r=this;if(void 0===t||""===t)return console.warn("wrong names"),!1;if(void 0===e)return console.warn("wrong callback"),!1;const i=this.resolveNames(t);return i.forEach(function(t){t=r.resolveName(t);r.callbacks[t.namespace]instanceof Object||(r.callbacks[t.namespace]={}),r.callbacks[t.namespace][t.value]instanceof Array||(r.callbacks[t.namespace][t.value]=[]),r.callbacks[t.namespace][t.value].push(e)}),this}off(t){const i=this;if(void 0===t||""===t)return console.warn("wrong name"),!1;const e=this.resolveNames(t);return e.forEach(function(t){var e=i.resolveName(t);if("base"!==e.namespace&&""===e.value)delete i.callbacks[e.namespace];else if("base"===e.namespace)for(const r in i.callbacks)i.callbacks[r]instanceof Object&&i.callbacks[r][e.value]instanceof Array&&(delete i.callbacks[r][e.value],0===Object.keys(i.callbacks[r]).length&&delete i.callbacks[r]);else i.callbacks[e.namespace]instanceof Object&&i.callbacks[e.namespace][e.value]instanceof Array&&(delete i.callbacks[e.namespace][e.value],0===Object.keys(i.callbacks[e.namespace]).length&&delete i.callbacks[e.namespace])}),this}trigger(t,e=[]){if(void 0===t||""===t)return console.warn("wrong name"),!1;const r=this;const i=e instanceof Array?e:[];let n=this.resolveNames(t);n=this.resolveName(n[0]),setTimeout(()=>{if("base"===n.namespace)for(const t in r.callbacks){if(r.callbacks[t]instanceof Object&&r.callbacks[t][n.value]instanceof Array)r.callbacks[t][n.value].forEach(function(t){t.apply(r,i)});else if(this.callbacks[n.namespace]instanceof Object){if(""===n.value)return console.warn("wrong name"),this;r.callbacks[n.namespace][n.value].forEach(function(t){t.apply(r,i)})}return null}},100)}resolveNames(t){let e=t;return e=e.replace(/[^a-zA-Z0-9 ,/.]/g,""),e=e.replace(/[,/]+/g," "),e=e.split(" "),e}resolveName(t){const e={};var r=t.split(".");return e.original=t,e.value=r[0],e.namespace="base",1=this.capacity)&&(this.buffer[this.size]=t,this.size+=1,!0)}full(){return this.size===this.capacity}get(t){return this.buffer[t]}}class pr{constructor(t){this.render_image=(o,s)=>new Promise((r,e)=>{var i=o[s],t=+i.getAttribute("recindex"),n=this.read_image(t-1),t=new FileReader;t.onload=t=>{var e;i.src=null===(e=t.target)||void 0===e?void 0:e.result,r(null===(t=t.target)||void 0===t?void 0:t.result)},t.onerror=function(t){e(t)},t.readAsDataURL(n)}),this.view=new DataView(t),this.buffer=this.view.buffer,this.offset=0,this.header=null}parse(){}getUint8(){var t=this.view.getUint8(this.offset);return this.offset+=1,t}getUint16(){var t=this.view.getUint16(this.offset);return this.offset+=2,t}getUint32(){var t=this.view.getUint32(this.offset);return this.offset+=4,t}getStr(t){var e=ur(this.buffer.slice(this.offset,this.offset+t));return this.offset+=t,e}skip(t){this.offset+=t}setoffset(t){this.offset=t}get_record_extrasize(t,e){for(var r,i,n,o=t.length-1,s=0,a=15;0>3&2047,h=3+(7&s),l=i.size();for(let t=0;tn(this,void 0,void 0,function*(){this.load();var t=this.read_text(),t=fr.parseFromString(t,"text/html").documentElement,e=t.getElementsByTagName("img");for(let t=0;tpagebreak").filter(t=>t.trim());for(let t=0;tthis.chapterList.length&&0===t&&(e=Math.floor(9e5*Math.random())+1e5,this.chapterList.unshift({label:"Forword#"+t,id:"title"+e,href:"#title"+e,subitems:[]})),this.chapterDocList.push({title:this.chapterList[t].label,text:r[t]});return this.chapterDocList}}const br={svg:"image/svg+xml",png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",zip:"application/zip",rar:"application/x-rar-compressed","7z":"application/x-7z-compressed",tar:"application/x-tar",html:"text/html",htm:"text/html",xml:"text/xml",xhtml:"application/xhtml+xml"};class vr{constructor(t,e,r,i,n){this.fileNameList=t,this.zip=e,this.bookStr="",this.format=n,this.bookDoc=null,this.mode=r,this.chapterList=[],this.extension=this.fileNameList[0].split(".").reverse()[0],this.element=i,this.getBookStr()}getBookStr(){let r=document.createElement("div");var i="single"===this.mode?1:2;for(let e=0;en(this,void 0,void 0,function*(){var t=new Image;t.onload=function(){r(t.height/t.width)};let e;e="cbr"===this.format?this.zip.decompress(this.fileNameList[0]):"cbt"===this.format?this.zip[Ze.findLastIndex(this.zip,{name:this.fileNameList[0]})].buffer:yield this.zip.file(this.fileNameList[0]).async("arraybuffer"),t.src="data:"+br[this.extension.toLowerCase()]+";base64,"+this.base64ArrayBuffer(e)}))}renderComic(){window.frames[0].document.body.innerHTML=this.bookDoc.outerHTML}renderImage(e){return n(this,void 0,void 0,function*(){if(this.extension=this.fileNameList[0].split(".").reverse()[0],!window.frames[0].document.getElementById(e+"").src){let t;t="cbr"===this.format?this.zip.decompress(this.fileNameList[e]):"cbt"===this.format?this.zip[Ze.findLastIndex(this.zip,{name:this.fileNameList[e]})].buffer:yield this.zip.file(this.fileNameList[e]).async("arraybuffer"),window.frames[0].document.getElementById(e+"")&&(window.frames[0].document.getElementById(e+"").src="data:"+br[this.extension.toLowerCase()]+";base64,"+this.base64ArrayBuffer(t))}})}base64ArrayBuffer(t){for(var e,r="",i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n=new Uint8Array(t),o=n.byteLength,t=o%3,s=o-t,a=0;a>18]+i[(258048&e)>>12]+i[(4032&e)>>6]+i[63&e];return 1==t?r+=i[(252&(e=n[s]))>>2]+i[(3&e)<<4]+"==":2==t&&(r+=i[(64512&(e=n[s]<<8|n[1+s]))>>10]+i[(1008&e)>>4]+i[(15&e)<<2]+"="),r}}const yr=(t,e)=>{0{var i=r||parseInt(s.getKookitConfig("count"))||0;i?(r=Array.from(window.frames[0].document.body.querySelectorAll("img"))[i],"scroll"!==e?window.frames[0].document.body.scrollTo(i&&r?r.offsetLeft:0,0):t.scrollTo(0,i&&r?r.offsetTop:0)):("scroll"!==e?window.frames[0].document.body:t).scrollTo(0,0)};window.e=window.eval,window.a=window.atob,t.Azw3Render=class extends cr{constructor(t,e){super(),this.azw3Buffer=t,this.mode=e,this.chapterList=[],this.chapterDocList=[],this.bookStr="",this.element=""}renderTo(i){return n(this,void 0,void 0,function*(){return new Promise((r,t)=>n(this,void 0,void 0,function*(){if(yield f()){var e=(yield new pr(this.azw3Buffer).render()).outerHTML;this.bookStr=e,this.element=i;let t=new lr(this.bookStr);this.chapterList=t.getChapter(),this.chapterDocList=t.getChapterDoc();e=s.getKookitConfig("chapterTitle")||this.chapterDocList[0].title;Xe(i),Ye(i,this.mode),ir(e,this.chapterDocList,this.element,this.mode),this.trigger("rendered"),r()}else r()}))})}getChapter(){return this.chapterList}getPageSize(){return{width:window.frames[0].document.body.scrollWidth,height:window.frames[0].document.body.scrollHeight}}goToChapter(t){ir(t,this.chapterDocList,this.element,this.mode),this.trigger("rendered")}goToPosition(t,e,r){ir(e,this.chapterDocList,this.element,this.mode),nr(this.element,this.mode,t,r),this.trigger("rendered")}prev(){"scroll"===this.mode||0===window.frames[0].document.body.scrollLeft?rr(this.element,this.chapterList,this.chapterDocList,this.mode):er(this.element,this.chapterList,this.chapterDocList,this.mode,1),or(this.element,this.mode),this.trigger("rendered")}next(){Math.abs(window.frames[0].document.body.scrollWidth-window.frames[0].document.body.scrollLeft-window.frames[0].document.body.clientWidth)<10||"scroll"===this.mode?sr(this.element,this.chapterList,this.chapterDocList,this.mode):er(this.element,this.chapterList,this.chapterDocList,this.mode,-1),or(this.element,this.mode),this.trigger("rendered")}record(){or(this.element,this.mode)}getPosition(){return{text:s.getKookitConfig("text"),chapterTitle:s.getKookitConfig("chapterTitle"),count:s.getKookitConfig("count")}}setStyle(t){window.frames[0].document.body.setAttribute("style",t+window.frames[0].document.body.getAttribute("style"))}},t.ComicRender=class extends cr{constructor(t,e,r,i){super(),this.mode=r,this.format=i,this.zip=e,this.dataSource=t,this.element="",this.parser="",this.chapterList=[],this.largestId=parseInt(s.getKookitConfig("count"))||0}renderTo(o,s=0){return new Promise((t,e)=>n(this,void 0,void 0,function*(){if(yield f()){this.element=o,Xe(o),this.parser=new vr(this.dataSource,this.zip,this.mode,this.element,this.format),this.chapterList=this.parser.getChapter(),this.parser.renderComic(),this.renderImage(s);var r,i=yield this.parser.getImgRatio(),n=window.frames[0].document.getElementById(s+"").clientWidth*i;let e=window.frames[0].document.getElementsByTagName("img");for(let t=0;tthis.element.clientHeight?(e[t].style.height=this.element.clientHeight+"px",e[t].style.width=this.element.clientHeight/i+"px",e[t].style.paddingLeft=(this.element.clientWidth-("single"===this.mode?0:88))/2/r-this.element.clientHeight/i/2+"px"):(e[t].style.height=n+"px",e[t].style.marginTop=this.element.clientHeight/2-n/2+"px"));Ye(o,this.mode),Qe(o,this.mode),this.trigger("rendered"),t()}else t()}))}getPageSize(){return{width:window.frames[0].document.body.scrollWidth,height:window.frames[0].document.body.scrollHeight}}renderImage(e){var r=e+4n(this,void 0,void 0,function*(){if(yield f()){var e=(yield new pr(this.mobiBuffer).render()).outerHTML;this.bookStr=e,this.element=i;let t=new hr(this.bookStr);this.chapterDocList=t.getChapterDoc(),this.chapterList=t.getChapter();e=s.getKookitConfig("chapterTitle")||this.chapterDocList[0].title;Xe(i),Ye(i,this.mode),ir(e,this.chapterDocList,this.element,this.mode),this.trigger("rendered"),r()}else r()}))}getPageSize(){return{width:window.frames[0].document.body.scrollWidth,height:window.frames[0].document.body.scrollHeight}}getChapter(){return this.chapterList}goToChapter(t){ir(t,this.chapterDocList,this.element,this.mode),this.trigger("rendered")}goToPosition(t,e,r){ir(e,this.chapterDocList,this.element,this.mode),nr(this.element,this.mode,t,r),this.trigger("rendered")}prev(){"scroll"===this.mode||0===window.frames[0].document.body.scrollLeft?rr(this.element,this.chapterList,this.chapterDocList,this.mode):er(this.element,this.chapterList,this.chapterDocList,this.mode,1),this.trigger("rendered"),or(this.element,this.mode)}next(){Math.abs(window.frames[0].document.body.scrollWidth-window.frames[0].document.body.scrollLeft-window.frames[0].document.body.clientWidth)<10||"scroll"===this.mode?sr(this.element,this.chapterList,this.chapterDocList,this.mode):er(this.element,this.chapterList,this.chapterDocList,this.mode,-1),this.trigger("rendered"),or(this.element,this.mode)}record(){or(this.element,this.mode)}getPosition(){return{text:s.getKookitConfig("text"),chapterTitle:s.getKookitConfig("chapterTitle"),count:s.getKookitConfig("count")}}setStyle(t){window.frames[0].document.body.setAttribute("style",t+window.frames[0].document.body.getAttribute("style"))}},t.StrRender=class extends cr{constructor(t,e){super(),this.bookStr=t,this.mode=e,this.chapterList=[],this.chapterDocList=[],this.element=""}renderTo(i){return new Promise((r,t)=>n(this,void 0,void 0,function*(){if(yield f()){this.element=i;let t=new lr(this.bookStr);this.chapterList=t.getChapter(),this.chapterDocList=t.getChapterDoc();var e=s.getKookitConfig("chapterTitle")||this.chapterDocList[0].title;Xe(i),ir(e,this.chapterDocList,this.element,this.mode),Ye(i,this.mode),this.trigger("rendered"),r()}else r()}))}getChapter(){return this.chapterList}getPageSize(){return{width:window.frames[0].document.body.scrollWidth,height:window.frames[0].document.body.scrollHeight}}goToChapter(t){ir(t,this.chapterDocList,this.element,this.mode),this.trigger("rendered")}goToPosition(t,e,r){ir(e,this.chapterDocList,this.element,this.mode),this.trigger("rendered"),nr(this.element,this.mode,t,r)}record(){or(this.element,this.mode)}prev(){"scroll"===this.mode||0===window.frames[0].document.body.scrollLeft?rr(this.element,this.chapterList,this.chapterDocList,this.mode):er(this.element,this.chapterList,this.chapterDocList,this.mode,1),this.trigger("rendered"),or(this.element,this.mode)}next(){Math.abs(window.frames[0].document.body.scrollWidth-window.frames[0].document.body.scrollLeft-window.frames[0].document.body.clientWidth)<10||"scroll"===this.mode?sr(this.element,this.chapterList,this.chapterDocList,this.mode):er(this.element,this.chapterList,this.chapterDocList,this.mode,-1),this.trigger("rendered"),or(this.element,this.mode)}getPosition(){return{text:s.getKookitConfig("text"),chapterTitle:s.getKookitConfig("chapterTitle"),count:s.getKookitConfig("count")}}setStyle(t){window.frames[0].document.body.setAttribute("style",t+window.frames[0].document.body.getAttribute("style"))}},t.TxtRender=class extends cr{constructor(t,e,r="utf-8"){super(),this.txtBuffer=t,this.encoding=r,this.mode=e,this.chapterList=[],this.chapterDocList=[],this.bookStr="",this.element=""}renderTo(i){return new Promise((r,t)=>n(this,void 0,void 0,function*(){if(yield f()){var e=(t=>{let e="",r=!1;var i;for(i of t.split("\n"))i.trim()&&(a(i.trim(),r)?((i.trim().startsWith("第")||i.trim().startsWith("Chapter")||i.trim().startsWith("CHAPTER"))&&(r=!0),e+=`

${i}

`):e+=`

${i}

`);return e})(new TextDecoder(this.encoding).decode(this.txtBuffer));this.bookStr=e,this.element=i;let t=new gr(this.bookStr);this.chapterList=t.getChapter(),this.chapterDocList=t.getChapterDoc();e=s.getKookitConfig("chapterTitle")||this.chapterDocList[0].title;Xe(i),Ye(i,this.mode),ir(e,this.chapterDocList,this.element,this.mode),this.trigger("rendered"),r()}else r()}))}getChapter(){return this.chapterList}goToChapter(t){ir(t,this.chapterDocList,this.element,this.mode),this.trigger("rendered")}getPageSize(){return{width:window.frames[0].document.body.scrollWidth,height:window.frames[0].document.body.scrollHeight}}goToPosition(t,e,r){ir(e,this.chapterDocList,this.element,this.mode),nr(this.element,this.mode,t,r),this.trigger("rendered")}record(){or(this.element,this.mode)}prev(){"scroll"===this.mode||0===window.frames[0].document.body.scrollLeft?rr(this.element,this.chapterList,this.chapterDocList,this.mode):er(this.element,this.chapterList,this.chapterDocList,this.mode,1),this.trigger("rendered"),or(this.element,this.mode)}next(){Math.abs(window.frames[0].document.body.scrollWidth-window.frames[0].document.body.scrollLeft-window.frames[0].document.body.clientWidth)<10||"scroll"===this.mode?sr(this.element,this.chapterList,this.chapterDocList,this.mode):er(this.element,this.chapterList,this.chapterDocList,this.mode,-1),this.trigger("rendered"),or(this.element,this.mode)}getPosition(){return{text:s.getKookitConfig("text"),chapterTitle:s.getKookitConfig("chapterTitle"),count:s.getKookitConfig("count")}}setStyle(t){window.frames[0].document.body.setAttribute("style",t+window.frames[0].document.body.getAttribute("style"))}},Object.defineProperty(t,"__esModule",{value:!0})}); diff --git a/src/components/popups/popupMenu/component.tsx b/src/components/popups/popupMenu/component.tsx index ee462117..a29d069e 100644 --- a/src/components/popups/popupMenu/component.tsx +++ b/src/components/popups/popupMenu/component.tsx @@ -15,8 +15,6 @@ class PopupMenu extends React.Component { mode: string; showNote: boolean; isFirstShow: boolean; - cfiRange: any; - contents: any; rect: any; constructor(props: PopupMenuProps) { super(props); @@ -26,8 +24,6 @@ class PopupMenu extends React.Component { this.mode = ""; this.state = { deleteKey: "", - cfiRange: this.props.cfiRange, - contents: this.props.contents, rect: this.props.rect, }; } @@ -48,11 +44,9 @@ class PopupMenu extends React.Component { }); } componentWillReceiveProps(nextProps: PopupMenuProps) { - if (nextProps.cfiRange !== this.props.cfiRange) { + if (nextProps.rect !== this.props.rect) { this.setState( { - cfiRange: nextProps.cfiRange, - contents: nextProps.contents, rect: nextProps.rect, }, () => { @@ -133,14 +127,14 @@ class PopupMenu extends React.Component { ? rect.x : StorageUtil.getReaderConfig("readerMode") === "scroll" ? rect.right - : rect.x % this.props.currentEpub.rendition._layout.width; - let y = rect.y % this.props.currentEpub.rendition._layout.height; + : rect.x % this.props.pageWidth; + let y = rect.y % this.props.pageHeight; let posX = x + rect.width / 2 - 20; //防止menu超出图书 let rightEdge = this.props.menuMode === "note" || this.props.menuMode === "trans" - ? this.props.currentEpub.rendition._layout.width - 310 - : this.props.currentEpub.rendition._layout.width - 200; + ? this.props.pageWidth - 310 + : this.props.pageWidth - 200; let posY: number; //控制menu方向 if (y < height) { @@ -159,16 +153,14 @@ class PopupMenu extends React.Component { //渲染高亮 renderHighlighters = () => { let highlighters: any = this.props.notes; + console.log(this.props.notes, "highlighters"); if (!highlighters) return; - if (!this.props.rendition || !this.props.rendition.currentLocation) { - return; - } - const currentLocation = this.props.rendition.currentLocation(); - if (!currentLocation || !currentLocation.start) return; - let chapterIndex = currentLocation.start.index; let highlightersByChapter = highlighters.filter( - (item: any) => item.chapterIndex === chapterIndex + (item: any) => + item.chapterIndex === this.props.chapterIndex && + item.chapter === this.props.chapter ); + console.log(highlightersByChapter); let iframe = document.getElementsByTagName("iframe")[0]; let iWin = iframe.contentWindow || iframe.contentDocument?.defaultView; this.highlighter && this.highlighter.removeAllHighlights(); // 为了避免下次反序列化失败,必须先清除已有的高亮 @@ -270,9 +262,10 @@ class PopupMenu extends React.Component { this.handleHighlight(); } const PopupProps = { - cfiRange: this.props.cfiRange, - contents: this.props.contents, - rect: this.props.rect, + pageWidth: this.props.pageWidth, + pageHeight: this.props.pageHeight, + chapterIndex: this.props.chapterIndex, + chapter: this.props.chapter, }; return (
diff --git a/src/components/popups/popupMenu/interface.tsx b/src/components/popups/popupMenu/interface.tsx index 5ad5659d..196b1ab9 100644 --- a/src/components/popups/popupMenu/interface.tsx +++ b/src/components/popups/popupMenu/interface.tsx @@ -11,10 +11,13 @@ export interface PopupMenuProps { notes: NoteModel[]; color: number; rendition: any; - cfiRange: any; - contents: any; + // cfiRange: any; rect: any; noteKey: string; + pageWidth: number; + pageHeight: number; + chapterIndex: number; + chapter: string; handleNoteKey: (key: string) => void; t: (title: string) => string; handleOpenMenu: (isOpenMenu: boolean) => void; @@ -23,7 +26,6 @@ export interface PopupMenuProps { } export interface PopupMenuStates { deleteKey: string; - cfiRange: string; - contents: any; + // cfiRange: string; rect: DOMRect | null; } diff --git a/src/components/popups/popupNote/component.tsx b/src/components/popups/popupNote/component.tsx index ae92d826..3752d34c 100644 --- a/src/components/popups/popupNote/component.tsx +++ b/src/components/popups/popupNote/component.tsx @@ -45,17 +45,13 @@ class PopupNote extends React.Component { } else { //创建笔记 let bookKey = this.props.currentBook.key; - const currentLocation = this.props.currentEpub.rendition.currentLocation(); - let chapterHref = currentLocation.start.href; - let chapterIndex = currentLocation.start.index; - let chapter = "Unknown Chapter"; - let currentChapter = this.props.flattenChapters.filter( - (item: any) => item.href.split("#")[0] === chapterHref - )[0]; - if (currentChapter) { - chapter = currentChapter.label.trim(" "); + let cfi = ""; + if (this.props.currentBook.format === "EPUB") { + cfi = RecordLocation.getCfi(this.props.currentBook.key).cfi; + } else { + cfi = JSON.stringify(RecordLocation.getScrollHeight); } - const cfi = RecordLocation.getCfi(this.props.currentBook.key).cfi; + let iframe = document.getElementsByTagName("iframe")[0]; if (!iframe) return; let doc = iframe.contentDocument; @@ -84,8 +80,8 @@ class PopupNote extends React.Component { let tag = this.state.tag; let note = new Note( bookKey, - chapter, - chapterIndex, + this.props.chapter, + this.props.chapterIndex, text, cfi, range, diff --git a/src/components/popups/popupNote/interface.tsx b/src/components/popups/popupNote/interface.tsx index 7e29bc59..73f1fc53 100644 --- a/src/components/popups/popupNote/interface.tsx +++ b/src/components/popups/popupNote/interface.tsx @@ -7,6 +7,10 @@ export interface PopupNoteProps { flattenChapters: any; color: number; noteKey: string; + pageWidth: number; + pageHeight: number; + chapterIndex: number; + chapter: string; handleNoteKey: (key: string) => void; handleOpenMenu: (isOpenMenu: boolean) => void; handleMenuMode: (menu: string) => void; diff --git a/src/components/popups/popupOption/component.tsx b/src/components/popups/popupOption/component.tsx index f963fc91..50a5a9b7 100644 --- a/src/components/popups/popupOption/component.tsx +++ b/src/components/popups/popupOption/component.tsx @@ -26,7 +26,7 @@ class PopupOption extends React.Component { let posY = popupMenu?.style.top; posX = parseInt(posX.substr(0, posX.length - 2)); posY = parseInt(posY.substr(0, posY.length - 2)); - let rightEdge = this.props.currentEpub.rendition._layout.width - 310; + let rightEdge = this.props.pageWidth - 310; if (posX > rightEdge) { popupMenu.setAttribute("style", `left:${rightEdge}px;top:${posY}px`); } @@ -48,18 +48,14 @@ class PopupOption extends React.Component { }; handleDigest = () => { let bookKey = this.props.currentBook.key; - const currentLocation = this.props.currentEpub.rendition.currentLocation(); - let chapterHref = currentLocation.start.href; - let chapterIndex = currentLocation.start.index; - let chapter = "Unknown Chapter"; - let currentChapter = this.props.flattenChapters.filter( - (item: any) => item.href.split("#")[0] === chapterHref - )[0]; - if (currentChapter) { - chapter = currentChapter.label.trim(" "); + let cfi = ""; + if (this.props.currentBook.format === "EPUB") { + cfi = RecordLocation.getCfi(this.props.currentBook.key).cfi; + } else { + cfi = JSON.stringify( + RecordLocation.getScrollHeight(this.props.currentBook.key) + ); } - const cfi = RecordLocation.getCfi(this.props.currentBook.key).cfi; - let percentage = RecordLocation.getCfi(this.props.currentBook.key) .percentage ? RecordLocation.getCfi(this.props.currentBook.key).percentage @@ -83,8 +79,8 @@ class PopupOption extends React.Component { text = text.replace(/\f/g, ""); let digest = new Note( bookKey, - chapter, - chapterIndex, + this.props.chapter, + this.props.chapterIndex, text, cfi, range, diff --git a/src/components/popups/popupOption/interface.tsx b/src/components/popups/popupOption/interface.tsx index 07c8d2ef..0e225b66 100644 --- a/src/components/popups/popupOption/interface.tsx +++ b/src/components/popups/popupOption/interface.tsx @@ -10,7 +10,10 @@ export interface PopupOptionProps { color: number; rect: DOMRect; cfiRange: string; - contents: any; + pageWidth: number; + pageHeight: number; + chapterIndex: number; + chapter: string; handleOpenMenu: (isOpenMenu: boolean) => void; handleMenuMode: (menu: string) => void; handleFetchNotes: () => void; diff --git a/src/containers/epubViewer/component.tsx b/src/containers/epubViewer/component.tsx index 5f930885..842f0c83 100644 --- a/src/containers/epubViewer/component.tsx +++ b/src/containers/epubViewer/component.tsx @@ -15,9 +15,12 @@ class EpubViewer extends React.Component { constructor(props: ViewAreaProps) { super(props); this.state = { - cfiRange: null, - contents: null, + // cfiRange: null, rect: null, + chapterIndex: 0, + chapter: "", + pageWidth: 0, + pageHeight: 0, }; this.isFirst = true; } @@ -63,6 +66,22 @@ class EpubViewer extends React.Component { if (!doc) { return; } + const currentLocation = this.props.rendition.currentLocation(); + let chapterHref = currentLocation.start.href; + if (!currentLocation || !currentLocation.start) return; + this.setState({ + chapterIndex: currentLocation.start.index, + pageWidth: this.props.currentEpub.rendition._layout.width, + pageHeight: this.props.currentEpub.rendition._layout.height, + }); + let chapter = "Unknown Chapter"; + let currentChapter = this.props.flattenChapters.filter( + (item: any) => item.href.split("#")[0] === chapterHref + )[0]; + if (currentChapter) { + chapter = currentChapter.label.trim(" "); + } + this.setState({ chapter }); StyleUtil.addDefaultCss(); this.props.rendition.themes.default(StyleUtil.getCustomCss(false)); if ( @@ -86,7 +105,7 @@ class EpubViewer extends React.Component { this.props.rendition.on("selected", (cfiRange: any, contents: any) => { var range = contents.range(cfiRange); var rect = range.getBoundingClientRect(); - this.setState({ cfiRange, contents, rect }); + this.setState({ rect }); }); this.props.rendition.themes.default(StyleUtil.getCustomCss(false)); this.props.rendition.display( @@ -99,9 +118,11 @@ class EpubViewer extends React.Component { render() { const popupMenuProps = { rendition: this.props.rendition, - cfiRange: this.state.cfiRange, - contents: this.state.contents, rect: this.state.rect, + pageWidth: this.state.pageWidth, + pageHeight: this.state.pageHeight, + chapterIndex: this.state.chapterIndex, + chapter: this.state.chapter, }; const imageViewerProps = { isShow: this.props.isShow, diff --git a/src/containers/epubViewer/index.tsx b/src/containers/epubViewer/index.tsx index 899618a9..49258861 100644 --- a/src/containers/epubViewer/index.tsx +++ b/src/containers/epubViewer/index.tsx @@ -16,6 +16,7 @@ const mapStateToProps = (state: stateType) => { currentEpub: state.book.currentEpub, currentBook: state.book.currentBook, locations: state.progressPanel.locations, + flattenChapters: state.reader.flattenChapters, bookmarks: state.reader.bookmarks, isShowBookmark: state.viewArea.isShowBookmark, }; diff --git a/src/containers/epubViewer/interface.tsx b/src/containers/epubViewer/interface.tsx index 40333c90..f847fa8e 100644 --- a/src/containers/epubViewer/interface.tsx +++ b/src/containers/epubViewer/interface.tsx @@ -6,6 +6,7 @@ export interface ViewAreaProps { currentBook: BookModel; currentEpub: any; bookmarks: BookmarkModel[]; + flattenChapters: any; locations: any; isShowBookmark: boolean; chapters: any[]; @@ -18,8 +19,10 @@ export interface ViewAreaProps { handleReadingEpub: (epub: object) => void; } export interface ViewAreaStates { - cfiRange: any; - contents: any; - // rendition: any; + // cfiRange: any; rect: any; + chapterIndex: number; + chapter: string; + pageWidth: number; + pageHeight: number; } diff --git a/src/containers/htmlViewer/component.tsx b/src/containers/htmlViewer/component.tsx index f5b69223..35c6fde3 100644 --- a/src/containers/htmlViewer/component.tsx +++ b/src/containers/htmlViewer/component.tsx @@ -7,11 +7,12 @@ import BookUtil from "../../utils/fileUtils/bookUtil"; import iconv from "iconv-lite"; import chardet from "chardet"; import rtfToHTML from "@iarna/rtf-to-html"; +import PopupMenu from "../../components/popups/popupMenu"; import { xmlBookTagFilter, xmlBookToObj } from "../../utils/fileUtils/xmlUtil"; import StorageUtil from "../../utils/storageUtil"; import RecordLocation from "../../utils/readUtils/recordLocation"; import { mimetype } from "../../constants/mimetype"; -import BackgroundWidget from "../../components/background"; +import Background from "../../components/background"; import toast from "react-hot-toast"; import StyleUtil from "../../utils/readUtils/styleUtil"; import "./index.css"; @@ -19,6 +20,7 @@ import { HtmlMouseEvent } from "../../utils/mouseEvent"; import untar from "js-untar"; import ImageViewer from "../../components/imageViewer"; import Chinese from "chinese-s2t"; +import _ from "underscore"; declare var window: any; @@ -33,6 +35,9 @@ class Viewer extends React.Component { constructor(props: ViewerProps) { super(props); this.state = { + cfiRange: null, + contents: null, + rect: null, key: "", isFirst: true, scale: StorageUtil.getReaderConfig("scale") || 1, @@ -41,10 +46,18 @@ class Viewer extends React.Component { .chapterTitle || "", readerMode: StorageUtil.getReaderConfig("readerMode") || "double", margin: parseInt(StorageUtil.getReaderConfig("margin")) || 30, + chapterIndex: 0, + chapter: "", + pageWidth: 0, + pageHeight: 0, }; this.lock = false; } - + componentWillMount() { + this.props.handleFetchBookmarks(); + this.props.handleFetchNotes(); + this.props.handleFetchBooks(); + } componentDidMount() { this.handleRenderBook(); @@ -104,15 +117,15 @@ class Viewer extends React.Component { handleRest = (rendition: any) => { StyleUtil.addDefaultCss(); rendition.setStyle(StyleUtil.getCustomCss(true)); - let bookLocation = RecordLocation.getScrollHeight( - this.props.currentBook.key - ); + let bookLocation: { text: string; count: string; chapterTitle: string } = + RecordLocation.getScrollHeight(this.props.currentBook.key); rendition.goToPosition( bookLocation.text, bookLocation.chapterTitle, bookLocation.count ); + window.frames[0].document.addEventListener("click", (event) => { this.props.handleLeaveReader("left"); this.props.handleLeaveReader("right"); @@ -132,16 +145,39 @@ class Viewer extends React.Component { subitems: [], rendition: rendition, }); + this.setState({ + pageWidth: rendition.getPageSize().width, + pageHeight: rendition.getPageSize().height, + }); + if (this.props.currentBook.format.startsWith("CB")) { + this.setState({ + chapter: + this.props.htmlBook.chapters[parseInt(bookLocation.count)].label, + chapterIndex: parseInt(bookLocation.count), + }); + } else { + this.setState({ + chapter: bookLocation.chapterTitle, + chapterIndex: _.findLastIndex(this.props.htmlBook.chapters, { + label: bookLocation.chapterTitle, + }), + }); + } + let iframe = document.getElementsByTagName("iframe")[0]; + if (!iframe) return; + let doc = iframe.contentDocument; + if (!doc) { + return; + } + doc.addEventListener("mouseup", () => { + if (!doc!.getSelection()) return; + var rect = doc!.getSelection()!.getRangeAt(0).getBoundingClientRect(); + this.setState({ rect }); + }); if ( StorageUtil.getReaderConfig("convertChinese") && StorageUtil.getReaderConfig("convertChinese") !== "Default" ) { - let iframe = document.getElementsByTagName("iframe")[0]; - if (!iframe) return; - let doc = iframe.contentDocument; - if (!doc) { - return; - } if ( StorageUtil.getReaderConfig("convertChinese") === "Simplified To Traditional" @@ -377,8 +413,20 @@ class Viewer extends React.Component { >
{StorageUtil.getReaderConfig("isHideBackground") === "yes" ? null : this .props.currentBook.key ? ( - + ) : null} + {this.props.htmlBook && ( + + )} {this.props.htmlBook && ( void; handleEnterReader: (position: string) => void; handleFetchBooks: () => void; - handleCurrentChapter: (currentChapter) => void; + handleFetchNotes: () => void; + handleFetchBookmarks: () => void; } export interface ViewerState { key: string; @@ -26,4 +27,11 @@ export interface ViewerState { chapterTitle: string; margin: number; readerMode: string; + chapter: string; + chapterIndex: number; + pageWidth: number; + pageHeight: number; + cfiRange: any; + contents: any; + rect: any; } diff --git a/src/containers/lists/cardList/component.tsx b/src/containers/lists/cardList/component.tsx index f77c692e..a8687d35 100644 --- a/src/containers/lists/cardList/component.tsx +++ b/src/containers/lists/cardList/component.tsx @@ -12,6 +12,7 @@ import NoteTag from "../../../components/noteTag"; import BookUtil from "../../../utils/fileUtils/bookUtil"; import toast from "react-hot-toast"; import StorageUtil from "../../../utils/storageUtil"; +import BookModel from "../../../model/Book"; class CardList extends React.Component { constructor(props: CardListProps) { super(props); @@ -34,7 +35,7 @@ class CardList extends React.Component { }; handleJump = (cfi: string, bookKey: string, percentage: number) => { let { books } = this.props; - let book: any; + let book: BookModel | null = null; //根据bookKey获取指定的book和epub for (let i = 0; i < books.length; i++) { if (books[i].key === bookKey) { @@ -46,7 +47,18 @@ class CardList extends React.Component { toast(this.props.t("Book not exist")); return; } - RecordLocation.recordCfi(bookKey, cfi, percentage); + if (book.format === "EPUB") { + RecordLocation.recordCfi(bookKey, cfi, percentage); + } else { + let bookLocation = JSON.parse(cfi) || {}; + RecordLocation.recordScrollHeight( + bookKey, + bookLocation.text, + bookLocation.chapterTitle, + bookLocation.count + ); + } + if (StorageUtil.getReaderConfig("isOpenInMain") === "yes") { this.props.history.push(BookUtil.getBookUrl(book)); } else { diff --git a/src/store/actions/reader.tsx b/src/store/actions/reader.tsx index 10b7c1d0..219ef5ed 100644 --- a/src/store/actions/reader.tsx +++ b/src/store/actions/reader.tsx @@ -43,6 +43,7 @@ export function handleFetchNotes() { noteArr = value; } let keyArr = AddTrash.getAllTrash(); + console.log(noteArr, "noteArr"); dispatch(handleNotes(handleKeyRemove(noteArr, keyArr))); dispatch( handleDigests( diff --git a/src/utils/mouseEvent.tsx b/src/utils/mouseEvent.tsx index f297309c..410b3ce1 100644 --- a/src/utils/mouseEvent.tsx +++ b/src/utils/mouseEvent.tsx @@ -90,6 +90,7 @@ const bindEvent = ( ) => { doc.addEventListener("keydown", (event) => { arrowKeys(rendition, event.keyCode); + //使用Key判断是否是htmlBook if (key) { let postion = rendition.getPosition(); RecordLocation.recordScrollHeight(