From e86ccdb0fe6a2ba3a0ab9ddd3e045fa3771108e0 Mon Sep 17 00:00:00 2001 From: troyeguo <13820674+troyeguo@users.noreply.github.com> Date: Mon, 29 Nov 2021 12:46:05 +0800 Subject: [PATCH] fix bug Former-commit-id: 72b46bbefe8dbf65ea8861d5ede19492fea041d8 --- main.js | 7 +++ public/lib/kookit/kookit.umd.js | 4 +- src/assets/locales/cn/translation.json | 3 +- src/assets/locales/en/translation.json | 1 + .../dialogs/actionDialog/component.tsx | 2 +- src/components/emptyCover/emptyCover.css | 3 +- src/components/imageViewer/component.tsx | 2 - src/components/popups/popupMenu/component.tsx | 19 +++++-- .../popups/popupOption/component.tsx | 1 - .../settingSwitch/component.tsx | 5 ++ .../settingSwitch/interface.tsx | 1 + src/constants/settingList.tsx | 25 ++++----- src/containers/htmlViewer/component.tsx | 55 ++++++++++++++---- src/containers/lists/cardList/component.tsx | 2 +- .../panels/operationPanel/component.tsx | 56 +++++++++++++++++-- src/pages/epubPage/component.tsx | 14 ++--- src/pages/htmlReader/component.tsx | 1 - src/utils/fileUtils/bookUtil.tsx | 36 ++++++++++++ src/utils/mouseEvent.tsx | 36 ++++++++---- src/utils/readUtils/recordLocation.tsx | 17 +++--- src/utils/readUtils/styleUtil.tsx | 2 - 21 files changed, 215 insertions(+), 77 deletions(-) diff --git a/main.js b/main.js index f05f6b38..a4726a89 100644 --- a/main.js +++ b/main.js @@ -130,6 +130,13 @@ app.on("ready", () => { ipcMain.on("user-data", (event, arg) => { event.returnValue = dirPath; }); + ipcMain.on("hide-reader", (event, arg) => { + if (!readerWindow.isDestroyed()) { + if (readerWindow.isFocused()) { + readerWindow.minimize(); + } + } + }); ipcMain.on("switch-moyu", (event, arg) => { let id; if (store.get("isPreventSleep") === "yes") { diff --git a/public/lib/kookit/kookit.umd.js b/public/lib/kookit/kookit.umd.js index a483b0de..48f066ca 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(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,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),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=Bt(t.prototype),n=t.apply(r,n);return I(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; +!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")()||{},g=Array.prototype,p=Object.prototype,b="undefined"!=typeof Symbol?Symbol.prototype:null,v=g.push,y=g.slice,w=p.toString,x=p.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),i=0;i":">",'"':""","'":"'","`":"`"},ie=te(ee),re=te(Ut(ee)),ne=gt.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=Bt(t.prototype),n=t.apply(i,n);return I(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; 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 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,img"));console.log(n);i=t.filter((t,e)=>t.innerText===o&&e===parseInt(s.getKookitConfig("count")||n));console.log(i);i=i[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+"")&&!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(t){this.parser.renderImage(t-1),this.parser.renderImage(t),this.parser.renderImage(t+1)}getChapter(){return this.chapterList}goToPosition(t,e,r){wr(this.element,this.mode,r)}goToChapter(t){wr(this.element,this.mode,this.dataSource.indexOf(t)+""),this.renderImage(this.dataSource.indexOf(t))}record(){or(this.element,this.mode);var t=parseInt(s.getKookitConfig("count"))||0;console.log(t),this.parser.renderImage(t-1),this.parser.renderImage(t),this.parser.renderImage(t+1)}prev(){var t=parseInt(s.getKookitConfig("count"))||0;console.log(t),this.parser.renderImage(t),this.parser.renderImage(t-1),this.parser.renderImage(t-2),yr(this.element,1),or(this.element,this.mode)}next(){var t=parseInt(s.getKookitConfig("count"))||0;console.log(t),this.parser.renderImage(t),this.parser.renderImage(t+1),this.parser.renderImage(t+2),this.parser.renderImage(t+3),this.parser.renderImage(t+4),yr(this.element,-1),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.MobiRender=class extends cr{constructor(t,e){super(),this.mobiBuffer=t,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=(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})}); + column-width: ${(t.offsetWidth-88)/("double"===e?2:1)}px;`)};let ti=!1;const ei=(t,e,i,r,n,o)=>{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.scrollBy({top:0,left:t.offsetWidth+88,behavior:o?"smooth":"auto"}))},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,img"));console.log(n);r=t.filter((t,e)=>t.innerText===o&&e===parseInt(s.getKookitConfig("count")||n));console.log(r);r=r[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 gi{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+"")&&!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,i)=>{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,i){super(),this.azw3Buffer=t,this.mode=e,this.isSliding=i||!1,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 gi(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}getPageSize(){return{width:window.frames[0].document.body.scrollWidth,height:window.frames[0].document.body.scrollHeight}}goToChapter(t){ri(t,this.chapterDocList,this.element,this.mode),this.trigger("rendered")}goToPosition(t,e,i){ri(e,this.chapterDocList,this.element,this.mode),ni(this.element,this.mode,t,i),this.trigger("rendered")}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,this.isSliding),oi(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?si(this.element,this.chapterList,this.chapterDocList,this.mode):ei(this.element,this.chapterList,this.chapterDocList,this.mode,-1,this.isSliding),oi(this.element,this.mode),this.trigger("rendered")}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,n){super(),this.isSliding=n||!1,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()}))}getPageSize(){return{width:window.frames[0].document.body.scrollWidth,height:window.frames[0].document.body.scrollHeight}}renderImage(t){this.parser.renderImage(t-1),this.parser.renderImage(t),this.parser.renderImage(t+1)}getChapter(){return this.chapterList}goToPosition(t,e,i){wi(this.element,this.mode,i)}goToChapter(t){wi(this.element,this.mode,this.dataSource.indexOf(t)+""),this.renderImage(this.dataSource.indexOf(t))}record(){oi(this.element,this.mode);var t=parseInt(s.getKookitConfig("count"))||0;console.log(t),this.parser.renderImage(t-1),this.parser.renderImage(t),this.parser.renderImage(t+1)}prev(){var t=parseInt(s.getKookitConfig("count"))||0;console.log(t),this.parser.renderImage(t),this.parser.renderImage(t-1),this.parser.renderImage(t-2),yi(this.element,1,this.isSliding),oi(this.element,this.mode)}next(){var t=parseInt(s.getKookitConfig("count"))||0;console.log(t),this.parser.renderImage(t),this.parser.renderImage(t+1),this.parser.renderImage(t+2),this.parser.renderImage(t+3),this.parser.renderImage(t+4),yi(this.element,-1,this.isSliding),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.MobiRender=class extends ci{constructor(t,e,i){super(),this.mobiBuffer=t,this.mode=e,this.chapterList=[],this.chapterDocList=[],this.bookStr="",this.element="",this.isSliding=i||!1}renderTo(r){return new Promise((i,t)=>n(this,void 0,void 0,function*(){if(yield f()){var e=(yield new gi(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()}))}getPageSize(){return{width:window.frames[0].document.body.scrollWidth,height:window.frames[0].document.body.scrollHeight}}getChapter(){return this.chapterList}goToChapter(t){ri(t,this.chapterDocList,this.element,this.mode),this.trigger("rendered")}goToPosition(t,e,i){ri(e,this.chapterDocList,this.element,this.mode),ni(this.element,this.mode,t,i),this.trigger("rendered")}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,this.isSliding),this.trigger("rendered"),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,this.isSliding),this.trigger("rendered"),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,i){super(),this.bookStr=t,this.mode=e,this.chapterList=[],this.chapterDocList=[],this.element="",this.isSliding=i||!1}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}getPageSize(){return{width:window.frames[0].document.body.scrollWidth,height:window.frames[0].document.body.scrollHeight}}goToChapter(t){ri(t,this.chapterDocList,this.element,this.mode),this.trigger("rendered")}goToPosition(t,e,i){ri(e,this.chapterDocList,this.element,this.mode),this.trigger("rendered"),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,this.isSliding),this.trigger("rendered"),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,this.isSliding),this.trigger("rendered"),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",r){super(),this.txtBuffer=t,this.encoding=i,this.mode=e,this.chapterList=[],this.chapterDocList=[],this.bookStr="",this.element="",this.isSliding=r||!1}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 pi(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),this.trigger("rendered")}getPageSize(){return{width:window.frames[0].document.body.scrollWidth,height:window.frames[0].document.body.scrollHeight}}goToPosition(t,e,i){ri(e,this.chapterDocList,this.element,this.mode),ni(this.element,this.mode,t,i),this.trigger("rendered")}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,this.isSliding),this.trigger("rendered"),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,this.isSliding),this.trigger("rendered"),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})}); diff --git a/src/assets/locales/cn/translation.json b/src/assets/locales/cn/translation.json index 92f15e0b..495a7f28 100644 --- a/src/assets/locales/cn/translation.json +++ b/src/assets/locales/cn/translation.json @@ -325,5 +325,6 @@ "Purple": "紫色", "Remember window's size from last read": "记忆阅读器窗口大小", "Letter Spacing": "字间距", - "Survey": "用户调查" + "Survey": "用户调查", + "Sliding Animation": "翻页动画" } diff --git a/src/assets/locales/en/translation.json b/src/assets/locales/en/translation.json index 087ca2b5..06031074 100644 --- a/src/assets/locales/en/translation.json +++ b/src/assets/locales/en/translation.json @@ -328,5 +328,6 @@ "When opening books in the file manager with Koodo, the opened books won't be added to the library": "When opening books in the file manager with Koodo, the opened books won't be added to the library", "Hide menu button": "Hide menu button", "Manage": "Manage", + "Sliding Animation": "Sliding Animation", "Please turn off open books in the main window": "Please turn off open books in the main window" } diff --git a/src/components/dialogs/actionDialog/component.tsx b/src/components/dialogs/actionDialog/component.tsx index 5bbdb66f..a2cdf465 100644 --- a/src/components/dialogs/actionDialog/component.tsx +++ b/src/components/dialogs/actionDialog/component.tsx @@ -41,7 +41,7 @@ class ActionDialog extends React.Component { style={{ left: this.props.left, top: this.props.top, - maxHeight: "37px", + maxHeight: "45px", paddingTop: "3px", }} > diff --git a/src/components/emptyCover/emptyCover.css b/src/components/emptyCover/emptyCover.css index 3eee2159..9678b27d 100644 --- a/src/components/emptyCover/emptyCover.css +++ b/src/components/emptyCover/emptyCover.css @@ -34,10 +34,9 @@ } .cover-footer { width: 100%; - text-align: left; + text-align: center; font-size: 13px; opacity: 0.3; position: absolute; bottom: 6px; - margin-left: 13px; } diff --git a/src/components/imageViewer/component.tsx b/src/components/imageViewer/component.tsx index 7f257bd7..dcafb0e3 100644 --- a/src/components/imageViewer/component.tsx +++ b/src/components/imageViewer/component.tsx @@ -112,7 +112,6 @@ class ImageViewer extends React.Component { handleZoomIn = () => { let image: any = document.querySelector(".image"); if (image.style.width === "200vw" || image.style.height === "200vh") return; - console.log(image.style); this.setState({ zoomIndex: this.state.zoomIndex + 1 }, () => { if (this.state.imageRatio === "horizontal") { image.style.width = `${60 + this.state.zoomIndex * 10}vw`; @@ -124,7 +123,6 @@ class ImageViewer extends React.Component { handleZoomOut = () => { let image: any = document.querySelector(".image"); if (image.style.width === "10vw" || image.style.height === "10vh") return; - console.log(image.style.height); this.setState({ zoomIndex: this.state.zoomIndex - 1 }, () => { if (this.state.imageRatio === "horizontal") { image.style.width = `${60 + this.state.zoomIndex * 10}vw`; diff --git a/src/components/popups/popupMenu/component.tsx b/src/components/popups/popupMenu/component.tsx index 0fc0de36..2695316c 100644 --- a/src/components/popups/popupMenu/component.tsx +++ b/src/components/popups/popupMenu/component.tsx @@ -6,6 +6,7 @@ import PopupTrans from "../popupTrans"; import { PopupMenuProps, PopupMenuStates } from "./interface"; import StorageUtil from "../../../utils/storageUtil"; let colors = ["#fac106", "#ebe702", "#0be603", "#0493e6"]; +let lines = ["#FF0000", "#000080", "#0000FF", "#2EFF2E"]; declare var window: any; @@ -132,18 +133,26 @@ class PopupMenu extends React.Component { var pageIndex = selected.page; if (!iWin.PDFViewerApplication.pdfViewer) return; var page = iWin.PDFViewerApplication.pdfViewer.getPageView(pageIndex); - if (page && page.textLayer && page.textLayer.textLayerDiv) { - var pageElement = page.textLayer.textLayerDiv; + if (page && page.div && page.textLayer && page.textLayer.textLayerDiv) { + var pageElement = + colorCode.indexOf("color") > -1 + ? page.textLayer.textLayerDiv + : page.div; var viewport = page.viewport; selected.coords.forEach((rect) => { var bounds = viewport.convertToViewportRectangle(rect); var el = iWin.document.createElement("div"); + el.setAttribute( "style", "position: absolute;" + - "background-color: " + - colors[colorCode.split("-")[1]] + + (colorCode.indexOf("color") > -1 + ? "background-color: " + : "border-bottom: ") + + (colorCode.indexOf("color") > -1 + ? colors[colorCode.split("-")[1]] + : `2px solid ${lines[colorCode.split("-")[1]]}`) + "; left:" + Math.min(bounds[0], bounds[2]) + "px; top:" + @@ -153,7 +162,7 @@ class PopupMenu extends React.Component { Math.abs(bounds[0] - bounds[2]) + "px; height:" + Math.abs(bounds[1] - bounds[3]) + - "px; z-index: 10;" + "px; z-index:0;" ); el.setAttribute("key", noteKey); el.addEventListener("click", (event: any) => { diff --git a/src/components/popups/popupOption/component.tsx b/src/components/popups/popupOption/component.tsx index e159098a..fbdb7995 100644 --- a/src/components/popups/popupOption/component.tsx +++ b/src/components/popups/popupOption/component.tsx @@ -37,7 +37,6 @@ class PopupOption extends React.Component { if (!iframe) return; let doc = iframe.contentDocument; if (!doc) return; - console.log(getSelection()); copy(getSelection()); this.props.handleOpenMenu(false); doc.getSelection()?.empty(); diff --git a/src/components/readerSettings/settingSwitch/component.tsx b/src/components/readerSettings/settingSwitch/component.tsx index 77f3584f..a0e54526 100644 --- a/src/components/readerSettings/settingSwitch/component.tsx +++ b/src/components/readerSettings/settingSwitch/component.tsx @@ -15,6 +15,7 @@ class SettingSwitch extends React.Component< this.state = { isBold: StorageUtil.getReaderConfig("isBold") === "yes", isIndent: StorageUtil.getReaderConfig("isIndent") === "yes", + isSliding: StorageUtil.getReaderConfig("isSliding") === "yes", isUnderline: StorageUtil.getReaderConfig("isUnderline") === "yes", isShadow: StorageUtil.getReaderConfig("isShadow") === "yes", isItalic: StorageUtil.getReaderConfig("isItalic") === "yes", @@ -44,6 +45,7 @@ class SettingSwitch extends React.Component< stateName, this.state[stateName] ? "yes" : "no" ); + toast(this.props.t("Change Successfully")); setTimeout(() => { this.props.renderFunc(); }, 500); @@ -82,6 +84,9 @@ class SettingSwitch extends React.Component< case "isIndent": this._handleChange("isIndent"); break; + case "isSliding": + this._handleChange("isSliding"); + break; case "isItalic": this._handleChange("isItalic"); break; diff --git a/src/components/readerSettings/settingSwitch/interface.tsx b/src/components/readerSettings/settingSwitch/interface.tsx index 2c903884..e446071e 100644 --- a/src/components/readerSettings/settingSwitch/interface.tsx +++ b/src/components/readerSettings/settingSwitch/interface.tsx @@ -14,6 +14,7 @@ export interface SettingSwitchState { isHideFooter: boolean; isBold: boolean; isIndent: boolean; + isSliding: boolean; isShadow: boolean; isUnderline: boolean; isItalic: boolean; diff --git a/src/constants/settingList.tsx b/src/constants/settingList.tsx index 0019bdcf..75e0631c 100644 --- a/src/constants/settingList.tsx +++ b/src/constants/settingList.tsx @@ -8,36 +8,31 @@ export const settingList = [ { isElectron: false, title: "Prevent accidental trigger", - desc: - "Reader menu will not be triggered by hovering but clicking on the area", + desc: "Reader menu will not be triggered by hovering but clicking on the area", propName: "isPreventTrigger", }, { isElectron: true, title: "Import books as link", - desc: - "The imported books will not be copied to library, only linked to the original book path", + desc: "The imported books will not be copied to library, only linked to the original book path", propName: "isImportPath", }, { isElectron: true, title: "Merge reader into Word", - desc: - "Get rid of window frame, make reader hide into Word or any text editor, and can't be detected. You need to set up the reader's position, size and style first.", + desc: "Get rid of window frame, make reader hide into Word or any text editor, and can't be detected. You need to set up the reader's position, size and style first.", propName: "isMergeWord", }, { isElectron: false, title: "Auto open last-read book", - desc: - "The book that you read from last time will be open automatically when launching", + desc: "The book that you read from last time will be open automatically when launching", propName: "isOpenBook", }, { isElectron: true, title: "Auto open book in fullscreen", - desc: - "Reader window will be maximized to fit the screen when opening a book", + desc: "Reader window will be maximized to fit the screen when opening a book", propName: "isAutoFullscreen", }, { @@ -55,15 +50,13 @@ export const settingList = [ { isElectron: true, title: "Open book without adding it to library", - desc: - "When opening books in the file manager with Koodo, the opened books won't be added to the library", + desc: "When opening books in the file manager with Koodo, the opened books won't be added to the library", propName: "isPreventAdd", }, { isElectron: false, title: "Open books in the main window", - desc: - "Book won't be opened in a seperate window but directly opened in the main window", + desc: "Book won't be opened in a seperate window but directly opened in the main window", propName: "isOpenInMain", }, { @@ -98,6 +91,10 @@ export const searchList = [ { label: "Yahoo", value: "yahoo" }, ]; export const readerSettingList = [ + { + title: "Sliding Animation", + propName: "isSliding", + }, { title: "Text Indent", propName: "isIndent", diff --git a/src/containers/htmlViewer/component.tsx b/src/containers/htmlViewer/component.tsx index e498569e..b8d37c4b 100644 --- a/src/containers/htmlViewer/component.tsx +++ b/src/containers/htmlViewer/component.tsx @@ -149,7 +149,6 @@ class Viewer extends React.Component { pageHeight: rendition.getPageSize().height, }); if (this.props.currentBook.format.startsWith("CB")) { - console.log(this.props.htmlBook.chapters); this.setState({ chapter: this.props.htmlBook.chapters[parseInt(bookLocation.count || "0")] @@ -203,7 +202,8 @@ class Viewer extends React.Component { entries.map((item: any) => item.name), unrar, this.state.readerMode, - "cbr" + "cbr", + StorageUtil.getReaderConfig("isSliding") === "yes" ? true : false ); await rendition.renderTo( document.getElementsByClassName("html-viewer-page")[0], @@ -221,7 +221,8 @@ class Viewer extends React.Component { Object.keys(contents.files).sort(), zip, this.state.readerMode, - "cbz" + "cbz", + StorageUtil.getReaderConfig("isSliding") === "yes" ? true : false ); await rendition.renderTo( document.getElementsByClassName("html-viewer-page")[0], @@ -240,7 +241,8 @@ class Viewer extends React.Component { extractedFiles.map((item: any) => item.name), extractedFiles, this.state.readerMode, - "cbt" + "cbt", + StorageUtil.getReaderConfig("isSliding") === "yes" ? true : false ); await rendition.renderTo( document.getElementsByClassName("html-viewer-page")[0], @@ -257,14 +259,22 @@ class Viewer extends React.Component { ); }; handleMobi = async (result: ArrayBuffer) => { - let rendition = new MobiRender(result, this.state.readerMode); + let rendition = new MobiRender( + result, + this.state.readerMode, + StorageUtil.getReaderConfig("isSliding") === "yes" ? true : false + ); await rendition.renderTo( document.getElementsByClassName("html-viewer-page")[0] ); this.handleRest(rendition); }; handleAzw3 = async (result: ArrayBuffer) => { - let rendition = new Azw3Render(result, this.state.readerMode); + let rendition = new Azw3Render( + result, + this.state.readerMode, + StorageUtil.getReaderConfig("isSliding") === "yes" ? true : false + ); await rendition.renderTo( document.getElementsByClassName("html-viewer-page")[0] ); @@ -295,7 +305,8 @@ class Viewer extends React.Component { let rendition = new TxtRender( result, this.state.readerMode, - this.props.currentBook.charset || charset || "utf8" + this.props.currentBook.charset || charset || "utf8", + StorageUtil.getReaderConfig("isSliding") === "yes" ? true : false ); await rendition.renderTo( document.getElementsByClassName("html-viewer-page")[0] @@ -307,7 +318,11 @@ class Viewer extends React.Component { var reader = new FileReader(); reader.onload = async (evt) => { let docStr = window.marked(evt.target?.result as any); - let rendition = new StrRender(docStr, this.state.readerMode); + let rendition = new StrRender( + docStr, + this.state.readerMode, + StorageUtil.getReaderConfig("isSliding") === "yes" ? true : false + ); await rendition.renderTo( document.getElementsByClassName("html-viewer-page")[0] ); @@ -326,7 +341,11 @@ class Viewer extends React.Component { ); rtfToHTML.fromString(text, async (err: any, html: any) => { - let rendition = new StrRender(html, this.state.readerMode); + let rendition = new StrRender( + html, + this.state.readerMode, + StorageUtil.getReaderConfig("isSliding") === "yes" ? true : false + ); await rendition.renderTo( document.getElementsByClassName("html-viewer-page")[0] ); @@ -337,7 +356,11 @@ class Viewer extends React.Component { window.mammoth .convertToHtml({ arrayBuffer: result }) .then(async (res: any) => { - let rendition = new StrRender(res.value, this.state.readerMode); + let rendition = new StrRender( + res.value, + this.state.readerMode, + StorageUtil.getReaderConfig("isSliding") === "yes" ? true : false + ); await rendition.renderTo( document.getElementsByClassName("html-viewer-page")[0] ); @@ -355,7 +378,11 @@ class Viewer extends React.Component { ); let bookObj = xmlBookToObj(Buffer.from(result)); bookObj += xmlBookTagFilter(fb2Str); - let rendition = new StrRender(bookObj, this.state.readerMode); + let rendition = new StrRender( + bookObj, + this.state.readerMode, + StorageUtil.getReaderConfig("isSliding") === "yes" ? true : false + ); await rendition.renderTo( document.getElementsByClassName("html-viewer-page")[0] ); @@ -368,7 +395,11 @@ class Viewer extends React.Component { var reader = new FileReader(); reader.onload = async (evt) => { const html = evt.target?.result as any; - let rendition = new StrRender(html, this.state.readerMode); + let rendition = new StrRender( + html, + this.state.readerMode, + StorageUtil.getReaderConfig("isSliding") === "yes" ? true : false + ); await rendition.renderTo( document.getElementsByClassName("html-viewer-page")[0] ); diff --git a/src/containers/lists/cardList/component.tsx b/src/containers/lists/cardList/component.tsx index ddb6e823..e7d25d4e 100644 --- a/src/containers/lists/cardList/component.tsx +++ b/src/containers/lists/cardList/component.tsx @@ -130,7 +130,7 @@ class CardList extends React.Component { {this.handleBookName(item.bookKey)}
- 》{item.chapter} + 》{item.chapter}
{ + if ( + document.webkitIsFullScreen || + document.mozFullScreen || + document.msFullscreenElement !== null + ) { + this.setState({ isFullScreen: !this.state.isFullScreen }); + StorageUtil.setReaderConfig( + "isFullScreen", + this.state.isFullScreen ? "no" : "yes" + ); + } + }; + if (document.addEventListener) { + document.addEventListener( + "fullscreenchange", + () => { + exitHandler(); + }, + false + ); + document.addEventListener( + "mozfullscreenchange", + () => { + exitHandler(); + }, + false + ); + document.addEventListener( + "MSFullscreenChange", + () => { + exitHandler(); + }, + false + ); + document.addEventListener( + "webkitfullscreenchange", + () => { + exitHandler(); + }, + false + ); + } + } // 点击切换全屏按钮触发 handleScreen() { !this.state.isFullScreen @@ -89,8 +135,8 @@ class OperationPanel extends React.Component< de.msRequestFullscreen(); } - this.setState({ isFullScreen: true }); - StorageUtil.setReaderConfig("isFullScreen", "yes"); + // this.setState({ isFullScreen: true }); + // StorageUtil.setReaderConfig("isFullScreen", "yes"); } // 退出全屏模式 handleExitFullScreen() { @@ -107,8 +153,8 @@ class OperationPanel extends React.Component< document.webkitExitFullscreen(); } - this.setState({ isFullScreen: false }); - StorageUtil.setReaderConfig("isFullScreen", "no"); + // this.setState({ isFullScreen: false }); + // StorageUtil.setReaderConfig("isFullScreen", "no"); } handleAddBookmark() { let bookKey = this.props.currentBook.key; diff --git a/src/pages/epubPage/component.tsx b/src/pages/epubPage/component.tsx index 1883bb31..9ba20896 100644 --- a/src/pages/epubPage/component.tsx +++ b/src/pages/epubPage/component.tsx @@ -21,7 +21,6 @@ class EpubReader extends React.Component { componentWillMount() { if (StorageUtil.getReaderConfig("isMergeWord") === "yes") { - console.log(document.querySelector("body")); document .querySelector("body") ?.setAttribute("style", "background-color: rgba(0,0,0,0)"); @@ -30,15 +29,10 @@ class EpubReader extends React.Component { let key = url[url.length - 1].split("?")[0]; localforage.getItem("books").then((result: any) => { - let book; - //兼容在主窗口打开 - if (this.props.currentBook.key) { - book = this.props.currentBook; - } else { - book = - result[_.findIndex(result, { key })] || - JSON.parse(localStorage.getItem("tempBook") || "{}"); - } + let book = + result[_.findIndex(result, { key })] || + JSON.parse(localStorage.getItem("tempBook") || "{}"); + BookUtil.fetchBook(key, false, book.path).then((result) => { if (!result) { toast.error(this.props.t("Book not exsits")); diff --git a/src/pages/htmlReader/component.tsx b/src/pages/htmlReader/component.tsx index 6789bc4f..364fe944 100644 --- a/src/pages/htmlReader/component.tsx +++ b/src/pages/htmlReader/component.tsx @@ -38,7 +38,6 @@ class Reader extends React.Component { } componentDidMount() { if (StorageUtil.getReaderConfig("isMergeWord") === "yes") { - console.log(document.querySelector("body")); document .querySelector("body") ?.setAttribute("style", "background-color: rgba(0,0,0,0)"); diff --git a/src/utils/fileUtils/bookUtil.tsx b/src/utils/fileUtils/bookUtil.tsx index 83943ff1..2e79631f 100644 --- a/src/utils/fileUtils/bookUtil.tsx +++ b/src/utils/fileUtils/bookUtil.tsx @@ -2,6 +2,7 @@ import StorageUtil from "../storageUtil"; import { isElectron } from "react-device-detect"; import localforage from "localforage"; import BookModel from "../../model/Book"; +import toast from "react-hot-toast"; class BookUtil { static addBook(key: string, buffer: ArrayBuffer) { @@ -60,6 +61,37 @@ class BookUtil { return localforage.removeItem(key); } } + static isBookExist(key: string, bookPath: string = "") { + return new Promise((resolve, reject) => { + if (isElectron) { + var fs = window.require("fs"); + var path = window.require("path"); + let _bookPath = path.join( + localStorage.getItem("storageLocation") + ? localStorage.getItem("storageLocation") + : window + .require("electron") + .ipcRenderer.sendSync("storage-location", "ping"), + `book`, + key + ); + + if ((bookPath && fs.existsSync(bookPath)) || fs.existsSync(_bookPath)) { + resolve(true); + } else { + resolve(false); + } + } else { + localforage.getItem(key).then((result) => { + if (result) { + resolve(true); + } else { + resolve(false); + } + }); + } + }); + } static fetchBook( key: string, isArrayBuffer: boolean = false, @@ -103,6 +135,10 @@ class BookUtil { } } static async RedirectBook(book: BookModel) { + if (!(await this.isBookExist(book.key, book.path))) { + toast.error("Book not exist"); + return; + } let ref = book.description === "readonly" || book.description === "pdf" ? book.format.toLowerCase() diff --git a/src/utils/mouseEvent.tsx b/src/utils/mouseEvent.tsx index 74def28e..6c253bca 100644 --- a/src/utils/mouseEvent.tsx +++ b/src/utils/mouseEvent.tsx @@ -43,6 +43,10 @@ const arrowKeys = (rendition: any, keyCode: number) => { } if (keyCode === 123) { if (isElectron) { + StorageUtil.setReaderConfig( + "isMergeWord", + StorageUtil.getReaderConfig("isMergeWord") === "yes" ? "no" : "yes" + ); window.require("electron").ipcRenderer.sendSync("switch-moyu", "ping"); } lock = true; @@ -51,6 +55,16 @@ const arrowKeys = (rendition: any, keyCode: number) => { }, 100); return false; } + if (keyCode === 9) { + if (isElectron) { + window.require("electron").ipcRenderer.sendSync("hide-reader", "ping"); + } + lock = true; + setTimeout(function () { + lock = false; + }, 100); + return false; + } }; const mouseChrome = (rendition: any, wheelDelta: number) => { @@ -180,15 +194,17 @@ export const HtmlMouseEvent = ( key: string, readerMode: string ) => { - let iframe = document.getElementsByTagName("iframe")[0]; - if (!iframe) return; - let doc = iframe.contentDocument; - if (!doc) { - return; - } - // navigate with mousewheel - window.addEventListener("keydown", (event) => { - arrowKeys(rendition, event.keyCode); + rendition.on("rendered", () => { + let iframe = document.getElementsByTagName("iframe")[0]; + if (!iframe) return; + let doc = iframe.contentDocument; + if (!doc) { + return; + } + // navigate with mousewheel + window.addEventListener("keydown", (event) => { + arrowKeys(rendition, event.keyCode); + }); + bindEvent(rendition, doc, key, readerMode); }); - bindEvent(rendition, doc, key, readerMode); }; diff --git a/src/utils/readUtils/recordLocation.tsx b/src/utils/readUtils/recordLocation.tsx index 985d1266..555135f0 100644 --- a/src/utils/readUtils/recordLocation.tsx +++ b/src/utils/readUtils/recordLocation.tsx @@ -3,14 +3,14 @@ import _ from "underscore"; class RecordLocation { static recordCfi(bookKey: string, cfi: string, percentage: number) { let json = localStorage.getItem("recordLocation"); - let obj = JSON.parse(json!) || {}; + let obj = JSON.parse(json || "{}"); obj[bookKey] = { cfi: cfi, percentage: percentage }; localStorage.setItem("recordLocation", JSON.stringify(obj)); } static getCfi(bookKey: string) { let json = localStorage.getItem("recordLocation"); - let obj = JSON.parse(json!) || {}; + let obj = JSON.parse(json || "{}"); return obj[bookKey] || {}; } static recordScrollHeight( @@ -20,35 +20,36 @@ class RecordLocation { count: string ) { let json = localStorage.getItem("recordLocation"); - let obj = JSON.parse(json!) || {}; + let obj = JSON.parse(json || "{}"); obj[bookKey] = { text, chapterTitle, count }; localStorage.setItem("recordLocation", JSON.stringify(obj)); } static getScrollHeight(bookKey: string) { let json = localStorage.getItem("recordLocation"); - let obj = JSON.parse(json!) || {}; + let obj = JSON.parse(json || "{}"); return obj[bookKey] || {}; } static getPDFlocation(fingerprint: string) { let json = localStorage.getItem("pdfjs.history"); - let arr = JSON.parse(json!).files || []; + console.log(json); + let arr = JSON.parse(json || "{}").files || []; return arr[_.findLastIndex(arr, { fingerprint })] || {}; } static recordPDFlocation(fingerprint: string, obj: object) { let json = localStorage.getItem("pdfjs.history"); - let _obj = JSON.parse(json!) || []; + let _obj = JSON.parse(json || "{}"); _obj.files[_.findLastIndex(_obj.files, { fingerprint })] = obj; localStorage.setItem("pdfjs.history", JSON.stringify(_obj)); } static getAllCfi() { let json = localStorage.getItem("recordLocation"); - let obj = JSON.parse(json!) || {}; + let obj = JSON.parse(json || "{}"); return obj; } static clear(bookKey: string) { let json = localStorage.getItem("recordLocation"); - let obj = JSON.parse(json!) || {}; + let obj = JSON.parse(json || "{}"); delete obj[bookKey]; localStorage.setItem("recordLocation", JSON.stringify(obj)); } diff --git a/src/utils/readUtils/styleUtil.tsx b/src/utils/readUtils/styleUtil.tsx index 34546bd9..f6f62aca 100644 --- a/src/utils/readUtils/styleUtil.tsx +++ b/src/utils/readUtils/styleUtil.tsx @@ -4,11 +4,9 @@ class styleUtil { // 为 iframe 添加默认的样式 static addDefaultCss() { let doc = window.frames[0].document; - console.log(doc, "doc"); if (!doc) return; let css = this.getDefaultCss(); let background = document.querySelector(".viewer"); - console.log(background, "background"); if (!background) return; background.setAttribute( "style",