trackkun-dom 1.1.5 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +1 -1
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(B,L){typeof exports=="object"&&typeof module<"u"?L(exports):typeof define=="function"&&define.amd?define(["exports"],L):(B=typeof globalThis<"u"?globalThis:B||self,L(B._trackkun_={}))})(this,function(B){"use strict";function L(a){let e=!1;return new Promise((t,r)=>{Promise.all(a.map(async n=>{const s=await n;!e&&s&&(e=!0,t(s))})).then(()=>{e||t(void 0)})})}function q(a,{removeTrailingSlash:e=!0}={}){if(!a)return;const t=e&&a.endsWith("/")?a.slice(0,-1):a;try{return new URL(t)}catch{return}}function S(a){if(!(!a||typeof a!="string"))return a.startsWith("http://")||a.startsWith("https://")?q(a)?.pathname:a.startsWith("//")?q(`https:${a}`)?.pathname:a}async function x(a,e,t){const r=await t(()=>{a=0});if(r!==void 0)return r;if(!(a<=0))return await new Promise(n=>{setTimeout(async()=>{const s=await x(a-1,e,t);n(s)},e)})}async function C(a,e,t=0){const r=e.root??document.documentElement,n=e.timeoutMs??1e4;return x(e.lazy===!0?n/50:0,50,()=>{const s=e.all===!0?Array.from(r.querySelectorAll(a)):r.querySelector(a)??void 0;return(e.all?!s?.length:!s)?void 0:s})}const be={text:Re,attr:Se,"attr-contain":$e,value:Ce,row:xe};function h(a,e={}){if(!a)return;const{root:t=document.documentElement,returnAll:r,preProcess:n}=e,s=a.split("||").map(p=>p.trim()).filter(p=>!!p&&p.includes("|"));if(s.length>1){for(let p=0;p<s.length;p+=1){const g=h(s[p],e);if(g?.length)return g}return}const[i,o]=a.split("|");if(!o)return;const l=(o?.startsWith("[")&&o.endsWith("]")?o.substring(1,o.length-1).split(","):[o]).map(p=>{const g=p.indexOf(":"),f=g!==-1;return{action:f?p.substring(0,g):p,param:f?p.substring(g+1):""}}),c=i?Array.from(t.querySelectorAll(i)):[t];if(!c.length)return r?[]:void 0;n&&n(c);const u=[];for(const p of c)for(const g of l){const f=be[g.action],m=f(p,g.param);if(m){if(r){u.push(m);break}return m}}return r?u:void 0}function Re(a){return Array.from(a.childNodes).filter(e=>e.nodeType===3).map(e=>j(e.textContent)).filter(Boolean).join(" ").trim()||j(a.textContent)}function Se(a,e){return j(a.getAttribute(e))}function $e(a,e){let t=a.getAttribute(e);if(!t){const r=a.getAttributeNames().find(n=>n.includes(e));r&&(t=a.getAttribute(r))}return j(t)}function Ce(a){return a.value}function xe(a,e){if(!e)return;const t=j(a.textContent)?.toLowerCase(),r=e.toLowerCase();if(!(t!==r&&t!==`${r}:`))return j(a.nextElementSibling?.textContent??a.nextSibling?.textContent)}function j(a){if(a)return a?.replace(/(\n|\t)/g," ").trim()||void 0}var De=(a=>(a[a.reading=1]="reading",a[a.paused=2]="paused",a[a.plan=3]="plan",a[a.completed=4]="completed",a[a.dropped=5]="dropped",a[a.deleted=6]="deleted",a))(De||{}),W=(a=>(a.id="id",a.name="name",a.slug="slug",a))(W||{}),U=(a=>(a.blank="about:blank",a.title="meta.title",a.reader="meta.reader",a))(U||{}),Te=(a=>(a[a.string=1]="string",a[a.number=2]="number",a[a.bool=3]="bool",a[a.selection=4]="selection",a))(Te||{}),Me=(a=>(a[a.pending=0]="pending",a[a.completed=1]="completed",a[a.offline=2]="offline",a[a.incompat=3]="incompat",a))(Me||{});const Pe=/(vol(ume)?|season)(\s*|-|\.)(\d+)/i,_e=/(ch(ap(t(er)?|\.)?|\.)?|^#|episode\.?)(\s*|-)(\d+([_-~,.]\d+)?)/i,Ne=/\d+([_-~,.]\d+)?/,Ie=/[_-~,]/;function P(a){if(!a||!a)return;if(!isNaN(+a))return{chap:+a};const e=a.match(Pe),t=e?.[0]?a.replace(e[0],"").trim():a,r=t.match(_e),n=t.match(Ne),s=r?.[6]??n?.[0];if(!s)return;const i=+s.replace(Ie,".");if(isNaN(i))return;const o=e?.[4];return{vol:o&&!isNaN(+o)?+o:void 0,chap:i}}function _(a){return a.sort((e,t)=>e.vol===void 0||t.vol===void 0?t.chap-e.chap:t.vol-e.vol||t.chap-e.chap),Be(a)}function Be(a){const e={};for(let t=a.length-1;t>=0;t--){const r=a[t],n=r.lang??"";r.vol!==void 0?e[n]=r.vol:e[n]!==void 0&&(r.inferVol=e[n])}return a}const Le=[{regex:/(sec|giây)/,seconds:1},{regex:/(min|phút)/,seconds:60},{regex:/(hour|giờ)/,seconds:3600},{regex:/(day|ngày)/,seconds:86400},{regex:/(week|tuần)/,seconds:604800},{regex:/(month|tháng)/,seconds:2592e3},{regex:/(year|năm)/,seconds:31536e3}];function H(a){const e=a?.toLowerCase();if(!e||e.includes("now"))return Date.now();if(e.includes("yesterday"))return Date.now()-864e5;const t=new Date(e);if(t instanceof Date){const s=t.valueOf();if(!isNaN(s))return t.getHours()===0&&t.getMinutes()===0?Math.min(Date.now(),s+432e5):s}const r=Le.find(s=>s.regex.test(e));if(!r)return;const n=e.split(" ").filter(Boolean);for(let s=0;s<n.length;s++){const i=n[s],o=i==="a"||i==="an"?1:+i;if(!o)continue;if(o<0)return;const l=Date.now()-o*r.seconds*1e3;return l>0?l:void 0}}function F(a,e=location.origin){if(!a)return;const t=new URL(a.startsWith("//")?`${location.protocol}${a}`:a,location.origin+location.pathname).toString();return t.startsWith(e)?t.replace(e,""):t}function X(a,e){if(!a)return"/";const t=a.replace("{titleSlug}",e),r=t.endsWith("/")?t:t+"/";return r.startsWith("/")?r:"/"+r}function je(a,e){const t=[...e],r=[];let n=-1,s=-1;for(let o=0;o<a.length&&!(!t.length&&o>=10);o++){const l={...a[o]},c=t.findIndex(g=>g.slug===l.slug&&g.name===l.name),u=c===-1?void 0:t.splice(c,1)[0],p=!u||u.chapters[0]?.chap!==l.chapters[0]?.chap;c!==-1&&(s=o),p&&(n=o,l.changed=!0),r.push(l)}if(n===-1)return[];if(t.length&&t.length!==e.length){const o=Math.max(10,s+1);r.splice(o);for(let l=s+1;l<r.length;l++)r[l].changed=!1;return r}const i=Math.min(Math.max(n+1,10),Math.max(s+1,100));return r.slice(0,i)}function Ae(a,e){const t={};return a.forEach(r=>{const n=r.chapters.reduce((s,i)=>{const o=i.lang||e||"";return s[o]||(s[o]=[]),s[o].push(i),s},{});Object.entries(n).forEach(([s,i])=>{const o=`${r.slug}:${s}`;t[o]?(t[o].chapters.push(...i),_(t[o].chapters)):t[o]={...r,lang:s===""?void 0:s,chapters:i}})}),Object.values(t)}var b=(a=>(a.title="title",a.reader="reader",a.releases="releases",a.chapters="chapters",a.search="search",a))(b||{}),Oe=Object.defineProperty,ke=(a,e,t)=>e in a?Oe(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,N=(a,e,t)=>(ke(a,typeof e!="symbol"?e+"":e,t),t);class z{constructor(e){N(this,"spec"),N(this,"siteMeta"),N(this,"tags"),N(this,"context"),N(this,"methodsMap",{[b.title]:()=>this.getRawTitleData(),[b.reader]:()=>this.getRawReaderData(),[b.releases]:()=>this.getRawReleasesData(),[b.search]:()=>this.getRawSearchData(),[b.chapters]:()=>this.getRawChaptersData()}),N(this,"normalizedTagsMap"),this.spec=e.spec,this.siteMeta=e.siteMeta,this.tags=e.tags,this.context=e.context}async getRawSearchData(){throw new Error("Unimplemented")}async getRawPageByType(e,t=!1){const r=await this.methodsMap[e](),n=!r&&Ee(this.spec);if(t&&!r&&!n)return;const s=location.origin+location.pathname;return{type:e,is404:n,specId:this.spec.id,siteName:h(this.spec.name),url:s,data:r,spec:this.spec,context:this.context}}resolveReaderSlug(e,t,r){const n=t.endsWith("/")?t.slice(0,-1):t;return n.startsWith(e)?n.replace(e,""):n}resolveTitleSlug(e){if(typeof e!="string")return;const t=S(e)?.split("/").filter(Boolean);return!t||!t.length?e:t[t.length-1]}finalizeRawReleasesData(e){const t=this.spec.releases?.title?.lang?this.siteMeta.defaultLang:void 0,r=Ae(e.rawReleases,t);if(r.length)return{rawReleases:this.context?.oldRawReleases?je(r,this.context.oldRawReleases):r}}getTagIdsFromNames(e){if(!e?.length)return;const t=this.normalizedTagsMap??(this.normalizedTagsMap=ze(this.tags)),r=e.map(n=>t[V(n)]).filter(Boolean);return r.length===0?void 0:Array.from(new Set(r)).sort((n,s)=>n-s)}}N(z,"specId");function ze(a){const e={};return a.forEach(({id:t,name:r,altNames:n})=>{e[V(r)]=t,n&&n.forEach(s=>{e[V(s)]=t})}),e}function V(a){const e=a.toLowerCase().replaceAll(" ","").replaceAll("-","");return e[e.length-1]==="s"?e.substring(0,e.length-1):e}function Ee(a){return a[404]&&document.querySelector(a[404])?!0:document.title.toLowerCase().includes("not found")}class R extends z{async getRawReleasesData(){if(!this.spec?.releases?.title)return;const{chapter:e,...t}=this.spec.releases.title,r=await C(t.sel,{lazy:!0,all:!0});if(!r?.length)return;const n=r.slice(0,100).map(i=>{const o=h(t.url,{root:i}),l=S(o),c=h(t.name,{root:i}),u=h(t.at,{root:i});if(!(!l||!c))return{titleEl:i,id:h(t.id,{root:i}),path:l,name:c,lang:h(t.lang,{root:i})?.toLowerCase(),at:u?H(u):void 0}}).filter(Boolean);if(!n.length)return;const s=[];return await Promise.all(n.map(async i=>{const{path:o,titleEl:l,lang:c,at:u,...p}=i,g=this.resolveTitleSlug(o);if(!g)return;const f=await this.getChapters(e,{root:l,titleSlug:g})??[];s.push({slug:g,chapters:c||u?f.map(m=>({...m,lang:m.lang??c,ts:m.ts??u})):f,...p})})),this.finalizeRawReleasesData({rawReleases:s})}async getRawTitleData(){const e=this.spec.title;if(!e||e.sel&&!await C(e.sel,{lazy:!!e.lazy}))return;const t=h(e.name);if(!t){await new Promise(l=>setTimeout(l,9e4));return}const r=this.resolveTitleSlug(location.pathname);if(!r)return;let n=h(e.tags,{returnAll:!0})??[];n.length===1&&(n=n[0].split(",").map(l=>l.trim()).filter(Boolean));const s=h(e.type),i=h(e.langs,{returnAll:!0})?.map(l=>l.toLowerCase()),o=await this.getChapters(e.chapter,{lazy:!0,titleSlug:r})??[];return{id:h(e.id),url:location.origin+location.pathname,slug:r,name:t,langs:i?.length?i:e.langs&&this.siteMeta.defaultLang?[this.siteMeta.defaultLang]:void 0,tags:this.getTagIdsFromNames([...n??[],...s?[s]:[]]),chapters:o,img:F(h(e.img))}}async getRawReaderData(){const{spec:e,siteMeta:t}=this;if(!e?.reader||e.generic&&!await R.isReaderPage(e.reader))return;const r=e.reader.content;if(!(!r||await R.verifyImgsLocator(r)))return;const n=e.reader.title,s=document.querySelector(n.sel);if(!s)return;const i=h(n.name,{root:s}),o=h(n.url,{root:s}),l=this.resolveTitleSlug(o),c=h(n.img,{root:s});if(!i||!o||!l)return;const u=!!this.context?.disableLazyChapters,p=await this.getChapters(e.reader?.chapter,{titleSlug:l,lazy:!u,timeoutMs:12e4})??[],g=h(e.reader.label)?.toLowerCase().replace(i.toLowerCase(),"");if(!g)return;const{vol:f,chap:m=0}=P(g)||{},w=X(t.readerBase,l),v=t.readerBase.split("/").indexOf("{lang}"),y=v!==-1?location.pathname.substring(1).split("/")[v]?.toLowerCase():void 0,d=y?w.replace("{lang}",y):w,T=y??h(e.reader.lang)?.toLowerCase()??(e.reader.lang?this.siteMeta.defaultLang:void 0);return this.finalizeRawReaderData({vol:f,chap:m,lang:T,slug:this.resolveReaderSlug(d,location.pathname,location.href),basePath:d,imgsLocator:e.reader.imgs,title:{id:h(n.id),url:o,slug:l,name:i,langs:T?[T]:void 0,img:F(c),chapters:p,hasMoreChapters:!p.length&&u}},{prevSlug:this.findNeighborChapter({sel:e.reader.prev,basePath:d}),nextSlug:this.findNeighborChapter({sel:e.reader.next,basePath:d})})}async getRawChaptersData(){const e=this.siteMeta.chapters;if(e===U.blank)return;const t=e===U.reader?(await this.getRawReaderData())?.title:await this.getRawTitleData();if(!t)return;const r=this.context?.lang,{chapters:n}=t,s=r?n.filter(i=>!i.lang||i.lang===r):n;return{chapters:s,title:{...t,chapters:[]},hasMore:!1,asc:!1,total:s.length}}async getRawSearchData(){const e=this.spec.search?.title;if(!e)return;const{chapter:t}=e,r=[];return await Promise.all(Array.from(document.querySelectorAll(e.sel)).map(async n=>{const s=h(e.url,{root:n}),i=S(s),o=h(e.name,{root:n}),l=this.resolveTitleSlug(i);!i||!o||!l||r.push({slug:l,name:o,chapters:await this.getChapters(t,{root:n,titleSlug:l})??[]})})),r.length?{rawReleases:r}:void 0}async getChapters(e,{root:t=document.documentElement,titleSlug:r="",lazy:n=!0,timeoutMs:s}){if(!e)return;const i=[],o=await C(e.sel,{root:t,all:!0,lazy:n,timeoutMs:s});if(!o?.length)return i;const l=(o??[]).map(w=>({id:h(e.id,{root:w}),label:h(e.label,{root:w}),url:h(e.url,{root:w}),at:h(e.at,{root:w})})),c=l.map(({label:w})=>P(w)),u=c[1]?.chap;!c[0]&&(u===void 0||u<=1)&&(c[0]={chap:0});const{readerBase:p}=this.siteMeta,g=X(p,r),f=p.split("/").indexOf("{lang}"),m=f!==-1;return c.forEach((w,v)=>{if(!w)return;const{id:y,url:d,at:T}=l[v],A=d?.startsWith("http")&&!d.startsWith(location.origin),O=A?d:S(d);if(!O)return;const k=!A&&m?O?.substring(1).split("/")[f]?.toLowerCase():void 0,$=A?O:this.resolveReaderSlug(k?g.replace("{lang}",k):g,O,d);i.push({...w,id:y,slug:$,lang:k,ts:H(T)||i[i.length+1]?.ts||Date.now()})}),_(i)}static async isReaderPage(e){return!!e.sel&&!!await C(e.sel,{lazy:!!e.lazy})}static async verifyImgsLocator(e){const t=e.split(",").map(r=>r.trim()).filter(Boolean).map(r=>`${r} img, ${r} canvas`).join(",");return!!await C(t,{lazy:!0,all:!1})}findNeighborChapter({sel:e,basePath:t}){const r=h(e);if(!r||r.startsWith("#")||r.startsWith("/#"))return;const n=S(r);return n?this.resolveReaderSlug(t,n,r):void 0}finalizeRawReaderData(e,{prevSlug:t,nextSlug:r}={}){const n=e.title?.chapters;if(!n?.length){const c=P(t),u=P(r);return!c&&!u?e:{...e,prev:c?{...c,slug:t}:void 0,next:u?{...u,slug:r}:void 0}}let s,i,o,l;for(let c=0;c<n.length&&!(s&&(!t||o)&&!r&&l);c++){const u=n[c];!s&&(e.slug==u.slug||e.chap===u.chap&&(e.vol===u.vol||e.vol===void 0))?(s=u,i=c):!o&&t===u.slug?o=u:!l&&r===u.slug&&(l=u)}return i!==void 0&&(o??(o=n[i+1]),l??(l=n[i-1])),{...e,inferVol:s?.inferVol,prev:o,next:l}}}var qe=Object.defineProperty,We=(a,e,t)=>e in a?qe(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Ue=(a,e,t)=>(We(a,typeof e!="symbol"?e+"":e,t),t);class G extends R{resolveTitleSlug(e){return S(e)?.split("/").filter(Boolean)[1]}}Ue(G,"specId","bato");function Fe(){return Math.random().toString(16).slice(2)}async function Ve({addListener:a,removeListener:e,transform:t,filter:r,handler:n,onTimeout:s,timeout:i,once:o}){return new Promise(l=>{a(p);const c=()=>o===!0&&e(p),u=i?setTimeout(()=>{c(),l(void 0),s?.()},i):void 0;async function p(g,...f){g=t?t(g):g,g!==void 0&&(!r||r(g,...f))&&(c(),l(g),n?.(g,...f),u&&clearTimeout(u))}})}async function Je(a){return(await Ve({addListener:e=>window.addEventListener("message",e),removeListener:e=>window.removeEventListener("message",e),...a}))?.data}async function He(a){const{receiverWindow:e,timeout:t,targetOrigin:r,event:n,args:s}=a,i={reqId:Fe(),event:n,args:s};return(e||window)?.postMessage(i,r??"*"),(await Je({filter:o=>o?.data?.resId===i.reqId,timeout:t??3e4,once:!0}))?.result}const D={isAny:!0};function M(a,...e){return He({event:"tk:fetchResult",args:{baseUrl:a,segments:e}})}function Xe(a){if(a)try{return JSON.parse(a)}catch{return}}var Ge=Object.defineProperty,Ye=(a,e,t)=>e in a?Ge(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Qe=(a,e,t)=>(Ye(a,typeof e!="symbol"?e+"":e,t),t);const Y=class ve extends R{async getRawReleasesData(){let e=[];try{e=await(await fetch(`https://api.${location.hostname}/chapter?accept_erotic_content=true&page=1&order=new`)).json()}catch{return}const t=[];return e.forEach(r=>{const{vol:n,chap:s,hid:i,lang:o,updated_at:l,md_comics:c}=r,u=typeof s=="string"&&!isNaN(+s)?+s:void 0;typeof u=="number"&&t.push({id:c.hid,slug:c.slug,name:c.title,chapters:[{slug:i,vol:typeof n=="string"&&!isNaN(+n)?+n:void 0,chap:u,lang:o,ts:new Date(l).valueOf()}]})}),super.finalizeRawReleasesData({rawReleases:t})}async getRawTitleData(){const e=await super.getRawTitleData();if(!e)return e;const t=await M("https://api.comick.app/","comic",D,"chapters");if(!t)return e;const r=await Ke(e.slug),n=Q(t),s=h("h1 ~ div.text-sm span:first-child|row:demographic"),i=s?this.getTagIdsFromNames([s])?.[0]:void 0;return i&&!e.tags?.includes(i)&&(e.tags?.push(i),e.tags?.sort((o,l)=>o-l)),{...e,img:e.img??F(h(this.spec.title?.img)),id:r,hasMoreChapters:n?.hasMore??!1,chapters:n?.chapters??[]}}async getRawReaderData(){const e=await super.getRawReaderData();if(!e)return e;const t=await M("/_next/data/",D,"comic",D),r=t?.comic?.hid,n=t?.comic?.md_comic_md_genres?.map?.(i=>i?.md_genre?.name),s=t?.comic?.md_covers?.[0]?.b2key;return{...e,lang:e.lang&&e.lang?.length<=6?e.lang:ve.getLangFromReaderSlug(e.slug)||e.lang,title:{...e.title,id:r?r+"":void 0,tags:this.getTagIdsFromNames(n),img:typeof s=="string"?`https://meo.comick.pictures/${s}`:void 0}}}static getLangFromReaderSlug(e){const t=e.split("-");let r;for(let n=t.length-1;n>0;n--){const s=t[n];if(!isNaN(+s))break;r=r?`${s}-${r}`:s}return r&&r.length<=6?r:void 0}async getRawChaptersData(){if(!this.context?.rawId)return;const{rawId:e,lang:t="en",skip:r}=this.context,n=r?Math.floor(r/1e3)+1:void 0;try{const s=await fetch(`https://api.comick.app/comic/${e}/chapters?lang=${t}&limit=1000${n&&n>1?`&page=${n}`:""}`),i=Q(await s.json());return i?{...i,lang:t,asc:!1}:void 0}catch{return}}};Qe(Y,"specId","comick");let Ze=Y;function Q(a){if(!Array.isArray(a?.chapters))return;const e=[];return a.chapters.forEach(t=>{const{vol:r,chap:n,hid:s,lang:i,updated_at:o}=t,l=typeof n=="string"&&!isNaN(+n)?+n:void 0;typeof l!="number"||e.some(c=>c.vol==r&&c.chap===l&&c.lang===i)||e.push({slug:s,vol:typeof r=="string"&&!isNaN(+r)?+r:void 0,chap:l,lang:i,ts:new Date(o).valueOf()})}),{chapters:_(e),total:a.total??e.length,hasMore:a.total>a.limit}}async function Ke(a){const e=document.querySelector("script#__NEXT_DATA__")?.textContent,t=e?Xe(e):void 0;return t?.query?.slug===a?t?.props?.pageProps?.comic?.hid??void 0:(await M("/_next/data/",D,"comic",a,"covers.json"))?.pageProps?.comic?.hid??void 0}var et=Object.defineProperty,tt=(a,e,t)=>e in a?et(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,at=(a,e,t)=>(tt(a,typeof e!="symbol"?e+"":e,t),t);class Z extends R{async getRawReleasesData(){const e=await this.getVM();if(!e)return super.getRawReleasesData();const t=e.LatestJSON.slice(0,100).map(r=>{const n=+r.Chapter.substring(1)/10;return{slug:r.IndexName,name:r.SeriesName,chapters:[{chap:n,slug:`${r.IndexName}-chapter-${n}.html`,ts:new Date(r.Date).valueOf()}]}});return this.finalizeRawReleasesData({rawReleases:t})}resolveTitleSlug(e){const t=super.resolveTitleSlug(e);if(!(!t||t.includes("{")))return t}async getRawTitleData(){const e=await super.getRawTitleData();return e&&{...e,chapters:K(await this.getVM(),e.slug),hasMoreChapters:!1}}resolveReaderSlug(e,t){return super.resolveReaderSlug(e,t).replace(/-page-\d{1,3}\.html\/?$/,".html")}async getRawReaderData(){const e=await this.getVM();if(!e)return;const t=document.querySelector(".ImageGallery img.img-fluid")?.getAttribute("ng-src"),r=e.IndexName,n=ee(e.CurChapter,r);return this.finalizeRawReaderData({chap:n.chap,slug:n.slug,imgs:rt(e,t??void 0),basePath:"/"+this.siteMeta.readerBase.replace("{titleSlug}",r)+"/",title:{name:e.SeriesName,slug:r,url:`/${this.siteMeta.titleBase}/${r}`,chapters:K(e,r),hasMoreChapters:!1}})}getVM(){return x(50,100,()=>window.angular?.element?.(document.documentElement)?.scope()?.vm)}}at(Z,"specId","manga4life");function K(a,e){return(a?.Chapters??a?.CHAPTERS??[]).sort((t,r)=>r.Chapter-t.Chapter).map(t=>ee(t,e))}function ee(a,e){const t=+a.Chapter.substring(1)/10;return{slug:`${e}-chapter-${t}.html`,chap:t,ts:new Date(a.Date).valueOf()}}function rt(a,e){let t=e?.split(".").slice(-1)[0]??"png";t=t.length>=3&&t.length<=4?t:"png";try{const r=a.CurChapter.Chapter.slice(1,-1),n=a.CurChapter.Chapter[a.CurChapter.Chapter.length-1],s=n!=="0"?`${r}.${n}`:r,i=`https://${a.CurPathName}/manga/${a.IndexName}/${a.CurChapter.Directory?`${a.CurChapter.Directory}/`:""}${s}-`;return a.Pages.map(o=>{const l=(o+"").padStart(3,"0");return`${i}${l}.${t}`})}catch{return}}var nt=Object.defineProperty,st=(a,e,t)=>e in a?nt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,it=(a,e,t)=>(st(a,typeof e!="symbol"?e+"":e,t),t);class te extends z{resolveTitleSlug(e){return S(e)?.split("/").filter(Boolean)[1]}async getRawReleasesData(){let e=[];try{e=(await(await fetch("https://api.mangadex.org/chapter?limit=96&offset=0&includes[]=manga&contentRating[]=safe&contentRating[]=suggestive&contentRating[]=erotica&contentRating[]=pornographic&order[readableAt]=desc")).json()).data}catch{return}const t=[];return e.forEach(({relationships:r,attributes:n,id:s})=>{const i=r.find(({type:c})=>c==="manga"),o=typeof n.volume=="string"?+n.volume:void 0,l=typeof n.chapter=="string"?+n.chapter:void 0;l&&t.push({slug:i.id,name:Object.values(i.attributes.title)[0],chapters:[{slug:n.externalUrl||s,vol:o,chap:l,lang:n.translatedLanguage,ts:new Date(n.readableAt).valueOf()}]})}),super.finalizeRawReleasesData({rawReleases:t})}async getRawTitleData(){const e="https://api.mangadex.org/manga/",[t,r]=await Promise.all([M(e,D),M(e,D,"feed")]);if(!t||!r)return;const n=r.data?.map?.(o=>{const{attributes:l,id:c}=o;if(typeof l!="object"||typeof c!="string"||!c)return;const{externalUrl:u,title:p,volume:g,chapter:f,translatedLanguage:m}=l;return{slug:u||c,label:p||void 0,vol:typeof g=="string"?+g:void 0,chap:typeof f=="string"?+f:void 0,lang:m||"en",ts:new Date(l.readableAt).valueOf()}}).filter(o=>o?.chap!=null)??[],{data:s}=t;if(!s)return;const i=re({data:s,getTagIdsFromNames:o=>this.getTagIdsFromNames(o)});if(i)return{...i,chapters:_(n),hasMoreChapters:(r.total||0)>(r.limit||0)}}async getRawReaderData(){const e="https://api.mangadex.org/",[t,r,n]=await Promise.all([M(e,"chapter",D),M(e,"at-home","server",D),M(e,"manga",D,"aggregate")]);if(!t||!r||!n)return;const s=t.data,{volume:i,chapter:o,externalUrl:l,translatedLanguage:c}=s.attributes||{},{baseUrl:u,chapter:{data:p,dataSaver:g,hash:f}}=r,m=s.relationships?.find?.($=>$.type==="manga");if(!m)return;const w=re({data:m,getTagIdsFromNames:$=>this.getTagIdsFromNames($)});if(!w||typeof n.volumes!="object")return;const v=ae(n)??[];(typeof o!="string"||o==="none")&&!v.length&&v.push({chap:0,slug:s.id});const y=v.findIndex($=>$.slug===s.id),d=s.relationships?.find?.($=>$.type==="scanlation_group"),T=u.endsWith("/")?u:u+"/",A=!!localStorage.getItem("md")?.includes?.('"dataSaver":true'),O=`${T}${A?"data-saver":"data"}/`,k=((A?g:p)??[]).map?.($=>`${O}${f}/${$}`)??[];return{externalUrl:l,vol:typeof i=="string"?+i:void 0,inferVol:v[y]?.inferVol,chap:+o||0,imgs:k,lang:c,slug:s.id,prev:v[y+1],next:v[y-1],basePath:"/chapter/",groupName:d?.attributes?.name,groupUrl:d?.attributes?.website,isWebtoon:m?.attributes?.tags?.some($=>$.attributes.name.en==="Long Strip"),title:{...w,chapters:v}}}async getRawChaptersData(){if(!this.context)return;const{titleSlug:e,lang:t="en"}=this.context;let r;try{const n=await fetch(`https://api.mangadex.org/manga/${e}/aggregate?translatedLanguage[]=${t}`);r=ae(await n.json())}catch{return}if(r)return{chapters:r,lang:t,asc:!1,hasMore:!1,total:r.length}}}it(te,"specId","mangadex");function ae(a){if(typeof a.volumes!="object")return;const e=Object.values(a.volumes).map(({volume:t,chapters:r})=>{const n=t==="none"||typeof t!="string"?void 0:+t;return Object.values(r).map(({id:s,chapter:i})=>typeof i!="string"||i==="none"?void 0:{vol:n,chap:+i,slug:s})}).flat().filter(Boolean).reverse();return _(e)}function re({data:a,getTagIdsFromNames:e}){const{id:t,attributes:r,relationships:n}=a;if(!t||typeof t!="string"||typeof r!="object")return;const{title:s,availableTranslatedLanguages:i,altTitles:o,tags:l,contentRating:c}=r;if(typeof s!="object"||i&&!Array.isArray(i))return;const u=Object.values(s)[0];if(!u||typeof u!="string")return;const p=ot(),g=(i??[])?.map?.(d=>typeof d=="string"?d:void 0).filter(Boolean)??[],f=g.filter(d=>d&&(!p||p.includes(d))),m=o?.map?.(d=>{const[[,T]=[]]=Object.entries(d);return T}),w=n?.find?.(d=>d.type==="cover_art")?.attributes?.fileName,v=w?`https://mangadex.org/covers/${t}/${w}`:void 0,y=(l||[]).map(d=>d?.attributes?.name?.en).concat(c).filter(Boolean);return{url:`${location.origin}/title/${t}`,slug:t,name:u,altNames:m,langs:f.length>0?f:g.length>0?g:["en"],img:v,tags:e(y)}}function ot(){const a=localStorage.getItem("md");if(a)try{const e=JSON.parse(a)?.userPreferences?.filteredLanguages;return e?.length?e:void 0}catch{return}}var lt=Object.defineProperty,ct=(a,e,t)=>e in a?lt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,ut=(a,e,t)=>(ct(a,typeof e!="symbol"?e+"":e,t),t);class ne extends R{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return{...e,rawReleases:e.rawReleases.map(t=>({...t,id:t.id?.split("?")[0]}))}}async getRawReaderData(){if((await C(".current-viewtype",{lazy:!0,all:!1}))?.textContent?.trim().toLowerCase()!=="volume")return await super.getRawReaderData()}async getRawChaptersData(){const e=this.context?.lang;if(!e)return;const t=await C(`.tab-content[data-name="chapter"] a.dropdown-item[data-code="${e.toUpperCase()}"]`,{lazy:!0,all:!1});if(t)return t.click(),await C(`.tab-content[data-name="chapter"] li.item[data-number] a[href*="/${e}/"]`,{lazy:!0,all:!1}),await super.getRawChaptersData()}}ut(ne,"specId","mangafire");var gt=Object.defineProperty,pt=(a,e,t)=>e in a?gt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,ht=(a,e,t)=>(pt(a,typeof e!="symbol"?e+"":e,t),t);class se extends R{async getRawReaderData(){const e=await super.getRawReaderData();return e&&{...e,imgs:await this.getImgs()}}resolveReaderSlug(e,t){const r=super.resolveReaderSlug(e,t),n=r.split("/").filter(Boolean);return n[n.length-1].startsWith("pg-")?n.slice(0,-1).join("/"):r}async getImgs(){const e=await x(100,20,()=>window.imgsrcs),t=window.CryptoJS,r=t.enc.Hex.parse("e11adc3949ba59abbe56e057f20f883e"),n={iv:t.enc.Hex.parse("1234567890abcdef1234567890abcdef"),padding:t.pad.ZeroPadding};return t.AES.decrypt(e,r,n).toString(t.enc.Utf8).split(",")}}ht(se,"specId","mangago");var dt=Object.defineProperty,ft=(a,e,t)=>e in a?dt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,mt=(a,e,t)=>(ft(a,typeof e!="symbol"?e+"":e,t),t);class ie extends z{async getRawReleasesData(){throw new Error("Unimplemented")}async getRawTitleData(){const e=await this.getPageData();if(!e)return;const t=await this.getPrefLangs()??["en"],r=e.chart_count_lang_to_serials?.find(s=>t?.includes(s?.field))?.count,n=await this.getTitleChapters();return{...this.transformRawTitleData(e),chapters:n,hasMoreChapters:r&&r>n.length}}async getRawReaderData(){const e=await this.getPageData(),t=e?.comicNode?.data,r=e?.imageSet;if(!e||!t||!r)return;const{httpLis:n,wordLis:s}=r,i=this.transformRawTitleData(t);return{slug:location.pathname.split("/").filter(Boolean)[2],lang:e.lang,vol:e.volume??void 0,chap:e.serial,imgs:n.map((o,l)=>`${o}?${s[l]}`),title:{...i,chapters:[],hasMoreChapters:!1},...await this.getReaderPrevNext(),basePath:`/title/${i.slug}/`}}async getRawChaptersData(){if(!this.context)return;const{lang:e,titleSlug:t,skip:r}=this.context;if(!e||!t)return;const n=await this.getPrefLangs()??["en"];let s;try{s=await fetch("https://mangapark.net/apo/",{method:"POST",body:JSON.stringify({query:"query get_content_comic_chapters($comicId: Int!, $isPref: Boolean) { get_content_comic_chapters(comicId: $comicId, isPref: $isPref) {serial chapters{lang cids}}}",variables:{comicId:+t,isPref:n.includes(e)},operationName:"get_content_comic_chapters"}),headers:{"Content-Type":"application/json"}})}catch{return}const i=[],o=(await s.json()).data.get_content_comic_chapters.reverse();return(r?o.slice(r):o).forEach(l=>{const c=l.chapters.find(g=>g.lang===e);if(!c)return;const u=c.cids?.[0];if(!c||!u)return;const p=l.serial;i.push({slug:`${u}-${e}-ch.${p}`,chap:p,ts:l.datePublic})}),{chapters:i,lang:e,asc:!1,hasMore:!1,total:i.length}}transformRawTitleData(e){return{url:e.urlPath,slug:e.id+"",name:e.name,langs:e.chart_count_lang_to_serials?.map?.(t=>t?.field?.toLowerCase()).filter(Boolean),img:e.urlCover300??e.urlCover600??e.urlCoverOri,tags:this.getTagIdsFromNames(e.genres)}}async getReaderPrevNext(){let e,t;return await x(20,100,async()=>{const r=await C("main a.btn",{lazy:!0,all:!0});if(r?.length)return e=r.find(n=>n.textContent?.toLowerCase().includes("prev")),t=r.find(n=>n.textContent?.toLowerCase().includes("next")),e||t?!0:void 0}),{prev:this.getChapterFromBtn(e),next:this.getChapterFromBtn(t)}}getChapterFromBtn(e){const t=e?.getAttribute("href");if(!t)return;const r=t.split("/").filter(Boolean).slice(-1)[0];if(!r)return;const n=P(r.split("-").slice(2).join("-"));if(n)return{slug:r,lang:r.split("-")[1]||void 0,...n}}async getTitleChapters(){const e=[],t=await C(".file-list-by-serial time[time]",{lazy:!0,all:!0});if(!t?.length)return e;let r;return t.forEach(n=>{const s=n.parentElement;for(let i=0;i<5;i++){const o=s?.parentElement?.querySelector('a[href*="/title/"]');if(!o)continue;const l=o.getAttribute("href")?.split("/").filter(Boolean)[2],c=o.textContent?.replace(/(\n|\t)/g," ").trim(),u=P(c);if(!u||!l||r&&r.chap==u.chap&&(r.vol??0)==(u.vol??0))break;const p=+n.getAttribute("time");r={...u,slug:l,lang:l.split("-")[1]||void 0,ts:p===p&&typeof p=="number"?p:void 0},e.push(r);break}}),_(e)}getPageData(){return x(100,50,()=>window.__NEXT_DATA__?.props?.pageProps?.dehydratedState?.queries?.[0]?.state?.data?.data)}getPrefLangs(){return x(40,50,()=>{const e=window.__NEXT_DATA__?.props?.pageProps;if(!e)return;const t=e?.extra?.sets?.general_prefLangs?.filter(Boolean);return t?.length?t:["en"]})}}mt(ie,"specId","mangapark");function oe(a,e){const t=a[0]===e?a.substring(1):a;return t[t.length-1]===e?t.substring(0,t.length-1):t}var wt=Object.defineProperty,yt=(a,e,t)=>e in a?wt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,vt=(a,e,t)=>(yt(a,typeof e!="symbol"?e+"":e,t),t);class le extends R{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return{...e,siteMeta:bt(this.spec.releases,this.siteMeta)}}async getRawTitleData(){const e=await super.getRawTitleData();if(!e)return;const t=I(location.pathname);let r;if(e.chapters?.length){const n=this.spec.title.chapter,s=document.querySelector(n.sel),i=S(h(n.url,{root:s}));i&&(r=I(i))}return{...e,siteMeta:E(this.siteMeta,{titleBase:t,readerBase:r})}}async getRawReaderData(){const e=await super.getRawReaderData();if(e)return{...e,siteMeta:E(this.siteMeta,{titleBase:I(S(e.title.url)),readerBase:I(location.pathname),idBase:ce()}),title:{...e.title,id:await this.getReaderTitleId()}}}async getRawSearchData(){const e=await super.getRawSearchData();if(!e)return;const t=this.spec.search.title,r=document.querySelector(t.sel),n=h(t.url,{root:r});return{...e,siteMeta:E(this.siteMeta,{titleBase:I(S(n)),idBase:ce()})}}async getReaderTitleId(){const e=await window.HISTORY?.getStored?.();if(!e||typeof e!="object")return;const t=Object.values(e).filter(Boolean);if(t.length)return t.sort((r,n)=>n.time-r.time),t[0].manga_ID}}vt(le,"specId","mangastream");function bt(a,e){if(!a)return;const t={...e,releases:oe(location.pathname,"/")},r=a.title,n=document.querySelector(r.sel)??void 0;if(!n)return;const s=S(h(r.url,{root:n}));if(s===void 0)return;const i=n.querySelector(r.chapter.sel)??void 0;if(!i)return;const o=S(h(r.chapter.url,{root:i}));if(o!==void 0)return t.titleBase=I(s),t.readerBase=I(o),e.titleIdType===W.id&&(h(r.id,{root:n})||(e.titleIdType=W.name)),E(e,t)}function ce(){return document.querySelector('link[rel="shortlink"][href*="/?p="]')?"?p=":void 0}function E(a,e){const t=Object.keys(e),r={...a};let n=!1;return t.forEach(s=>{const i=e[s];i!==a[s]&&(r[s]=i,n=!0)}),n?r:void 0}function I(a){return oe(a,"/").split("/").slice(0,-1).join("/")}var Rt=Object.defineProperty,St=(a,e,t)=>e in a?Rt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,$t=(a,e,t)=>(St(a,typeof e!="symbol"?e+"":e,t),t);class ue extends R{async getRawReaderData(){const e=await super.getRawReaderData();if(!e)return e;let t=e.title.id;if(!t){const n=this.spec.reader.title;n.id&&await C(n.id.split("|")[0],{lazy:!0}),t=h(n.id)}const r=!!this.context?.disableLazyChapters;return{...e,title:{...e.title,id:t,chapters:r?[]:await Ct(t),hasMoreChapters:r}}}resolveTitleSlug(e){const t=super.resolveTitleSlug(e);if(!t)return;const r=t.lastIndexOf("-"),n=+t.substring(r+1);return r===-1||isNaN(n)||n<1e3?t:t.substring(0,r)}}$t(ue,"specId","nettruyen");async function Ct(a){if(!a)return[];const e=await fetch(`/Comic/Services/ComicService.asmx/ProcessChapterList?comicId=${a}`).then(t=>t.status===200?t.json():void 0).catch(()=>[]);return e?.chapters?.length?_(e.chapters.map(t=>{const{name:r,url:n}=t,s=P(r);if(!(!s||!n))return{slug:S(n).split("/").filter(Boolean).slice(2).join("/"),...s}})):[]}var xt=Object.defineProperty,Dt=(a,e,t)=>e in a?xt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Tt=(a,e,t)=>(Dt(a,typeof e!="symbol"?e+"":e,t),t);class ge extends R{async getRawTitleData(){const e=await super.getRawTitleData();return e&&{...e,hasMoreChapters:!!J()}}async getRawChaptersData(){const e=await this.getRawTitleData();if(!e?.hasMoreChapters)return e;const t=this.context?.findContinue;if(t){const l=await this.findContinueChapters({rawTitleData:e,chapter:t});return l?{chapters:l,title:{...e,chapters:[]}}:void 0}const r=this.context?.skip,{chapters:n,...s}=e,i=n.length,o=r&&r>=i?Math.floor(r/i)+1:void 0;return o?{chapters:await this.getChaptersByPage({page:o,titleSlug:e.slug})??[],title:{...s,chapters:[]},hasMore:!!J(o),asc:!1,skip:r}:{chapters:n,title:{...s,chapters:[]},hasMore:!!J()}}async findContinueChapters({rawTitleData:e,chapter:{chap:t},curPage:r=1,cacheChaptersByPage:n={},...s}){const i=n[r]??e.chapters,o=i[i.length-1].chap<=t,l=s.maxPage??Mt();if(o){if(i[0].chap>t){const y=[...i].reverse().find(d=>d.chap>t);return y?[y]:i.slice(0,1)}if(r<=1)return i.slice(0,1)}else if(r===l)return i.slice(-1);const c=e.chapters.length,u=Object.keys(n).map(y=>+y).sort((y,d)=>y-d),p=o?-1:1,g=u[u.indexOf(r)+p];if(g===r+p)return o?n[g].slice(-1).concat(i.slice(0,1)):i.slice(-1).concat(n[g].slice(0,1));const f=o?t-i[0].chap:i[0].chap-t,m=Math.floor(f/c)+1,w=o?Math.max(m,(g??1)+1):Math.min(m,(g??l+1)-1,l),v=await this.getChaptersByPage({page:w,titleSlug:e.slug});if(v)return await this.findContinueChapters({rawTitleData:e,chapter:{chap:t},curPage:w,maxPage:l,cacheChaptersByPage:{...n,1:e.chapters,[w]:v}})}async getChaptersByPage({page:e,titleSlug:t}){const r=pe(e);if(!r)return;const n=this.spec.title.chapter,s=n.sel,i=document.querySelector(s),o=x(100,30,()=>{const l=document.querySelector(s);if(l&&i!==l)return!0;r.click()});return r.click(),await o,await this.getChapters(n,{lazy:!1,titleSlug:t})}}Tt(ge,"specId","reaper");function J(a=1){return pe(a+1)}function pe(a){const e=`span[wire\\:key="paginator-page-1-page${a}"] button,button[aria-label="Go to page ${a}"]`;return document.querySelector(e)}function Mt(){const a=Array.from(document.querySelectorAll('span[wire\\:key^="paginator-page-"]'));return a.length?+a[a.length-1].getAttribute("wire:key").split("-").slice(-1)[0].replace("page",""):1}var Pt=Object.defineProperty,_t=(a,e,t)=>e in a?Pt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Nt=(a,e,t)=>(_t(a,typeof e!="symbol"?e+"":e,t),t);class he extends R{async getRawTitleData(){const e=await super.getRawTitleData();if(!e)return;const t=h(".info-detail__row > .genre-btn,.info__right .stats__row:first-child|text",{returnAll:!0})?.map(r=>[r,...r.split(" ")]).flat();return de({...e,tags:this.getTagIdsFromNames(t)??[]},".episode-header .episode-cnt")}async getRawReaderData(){const e=await super.getRawReaderData();if(e)return{...e,title:de({...e.title,url:`${location.origin}/series/${e.title.slug}/info`,tags:[]},".episode-list .js-ep-cnt")}}async getRawChaptersData(){if(!this.context)return;const{rawId:e,skip:t}=this.context,r=1e3,n=t?Math.floor(t/1e3)+1:1;try{const s=await fetch(`/series/${e}/episodes?page=${n}&sort=NEWEST&max_limit=${r}`);return It(await s.json())}catch{return}}resolveTitleSlug(e){if(!e)return;const t=e.split("/").filter(Boolean);return t[1]??t[0]}}Nt(he,"specId","tapas");function de(a,e){const t=Bt(e)>20;return{...a,chapters:t?[]:a.chapters,hasMoreChapters:t}}function It(a){const e=a?.data?.episodes;if(!Array.isArray(e))return;const t=e.map(n=>({chap:n.pending_scene??n.scene,slug:n.id+"",ts:new Date(n.publish_date)?.valueOf?.()||void 0})),r=a?.data?.pagination;return{chapters:t,total:r?.total??t.length,hasMore:!!r?.has_next}}function Bt(a){return+(document.querySelector(a)?.textContent?.trim().split(" ")[0]||0)}var Lt=Object.defineProperty,jt=(a,e,t)=>e in a?Lt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,At=(a,e,t)=>(jt(a,typeof e!="symbol"?e+"":e,t),t);class fe extends R{async getRawTitleData(){const e=new URLSearchParams(location.search),t=e.get("episode_no"),r=e.get("title_no");if(t||!r)return;const n=await super.getRawTitleData();if(!n)return;const s=location.pathname.split("/")[1];return{...n,id:r,langs:[s].filter(Boolean),chapters:n.chapters.map(i=>({...i,lang:s})),hasMoreChapters:(document.querySelector(".paginate")?.childElementCount??1)>1}}async getRawReaderData(){const e=new URLSearchParams(location.search),t=e.get("episode_no"),r=e.get("title_no");if(!t||!r)return;const n=+t;if(n!==n)return;const s=document.title.split("|")[1]?.trim();if(!s)return;const i=location.pathname.split("/"),o=`${i.slice(0,4).join("/")}/list?title_no=${r}`,l=await this.getChapters({sel:"#sequence_scroll li.eg-flick-panel,#toolbar .episode_lst li[data-episode-no]",url:"a|attr:href",label:"|attr:data-episode-no || .num|text"},{lazy:!1}),c=i[1];return{chap:n,lang:c,slug:`${location.pathname}?title_no=${r}&episode_no=${n}`,basePath:"",imgs:await this.getReaderImgs(),isWebtoon:!0,title:{id:r,url:o,slug:o,name:s,langs:[c],chapters:(l??[]).map(u=>({...u,lang:c})),hasMoreChapters:!1}}}async getReaderImgs(){const e=h("#_imageList img|[attr:data-url,attr:src]",{returnAll:!0});return e?.length?e:await x(100,50,()=>window.__viewerState__?.scrollViewerParam?.imageList?.map(({url:t})=>t).filter(Boolean))}resolveReaderSlug(e,t,r){if(!r)return t;if(r.startsWith("http://")||r.startsWith("https://")){const n=q(r);return n.pathname+n.search}return r}}At(fe,"specId","webtoon");const Ot=[G,Ze,Z,te,le,ue,ge,he,se,ne,ie,fe];function me(a){const e=Ot.find(t=>t.specId===a.spec.id)??R;return new e(a)}async function kt(a){const{spec:e}=a;if(e){const t=a.siteMeta??e.meta,r=a.type?[a.type]:we(t,e.generic);if(!r.length)return;const n=me({...a,spec:e,siteMeta:t});return await L(r.map(s=>n.getRawPageByType(s,r.length>1)))}return await L((a.genericSpecs??[]).map(t=>{const r=we(t.meta,t.generic);if(!r.length)return[];const n=me({...a,spec:t,siteMeta:t.meta});return r.map(s=>n.getRawPageByType(s,!0))}).flat())}function we(a,e){if(location.pathname==="/")return[];const{titleBase:t,readerBase:r}=a,n=location.pathname.split("/").filter(Boolean),s=ye(n,r),i=ye(n,t);if(s!==i)return s>i?[b.reader]:[b.title];if(s>0)return[b.reader,b.title];if(n.length===1){const o=[!r&&b.reader,!t&&b.title].filter(Boolean);if(o.length)return o}return!r&&!t||e?[b.reader,b.title]:[]}function ye(a,e){if(!e)return 0;const t=e.split("/").filter(Boolean),r=t.includes("{slug}"),n=a.length-t.length;return r&&n!==0||!r&&n<1?0:t.filter((s,i)=>a[i]===s||s==="{titleSlug}"||s==="{lang}"||s==="{slug}").length}B.PageType=b,B.scrape=kt});
|
|
1
|
+
(function(B,L){typeof exports=="object"&&typeof module<"u"?L(exports):typeof define=="function"&&define.amd?define(["exports"],L):(B=typeof globalThis<"u"?globalThis:B||self,L(B._trackkun_={}))})(this,function(B){"use strict";function L(a){let e=!1;return new Promise((t,r)=>{Promise.all(a.map(async n=>{const s=await n;!e&&s&&(e=!0,t(s))})).then(()=>{e||t(void 0)})})}function W(a,{removeTrailingSlash:e=!0}={}){if(!a)return;const t=e&&a.endsWith("/")?a.slice(0,-1):a;try{return new URL(t)}catch{return}}function $(a){if(!(!a||typeof a!="string"))return a.startsWith("http://")||a.startsWith("https://")?W(a)?.pathname:a.startsWith("//")?W(`https:${a}`)?.pathname:a}async function x(a,e,t){const r=await t(()=>{a=0});if(r!==void 0)return r;if(!(a<=0))return await new Promise(n=>{setTimeout(async()=>{const s=await x(a-1,e,t);n(s)},e)})}async function C(a,e,t=0){const r=e.root??document.documentElement,n=e.timeoutMs??1e4;return x(e.lazy===!0?n/50:0,50,()=>{const s=e.all===!0?Array.from(r.querySelectorAll(a)):r.querySelector(a)??void 0;return(e.all?!s?.length:!s)?void 0:s})}const Re={text:$e,attr:Se,"attr-contain":Ce,value:xe,row:De};function h(a,e={}){if(!a)return;const{root:t=document.documentElement,returnAll:r,preProcess:n}=e,s=a.split("||").map(p=>p.trim()).filter(p=>!!p&&p.includes("|"));if(s.length>1){for(let p=0;p<s.length;p+=1){const g=h(s[p],e);if(g?.length)return g}return}const[i,o]=a.split("|");if(!o)return;const l=(o?.startsWith("[")&&o.endsWith("]")?o.substring(1,o.length-1).split(","):[o]).map(p=>{const g=p.indexOf(":"),f=g!==-1;return{action:f?p.substring(0,g):p,param:f?p.substring(g+1):""}}),c=i?Array.from(t.querySelectorAll(i)):[t];if(!c.length)return r?[]:void 0;n&&n(c);const u=[];for(const p of c)for(const g of l){const f=Re[g.action],m=f(p,g.param);if(m){if(r){u.push(m);break}return m}}return r?u:void 0}function $e(a){return Array.from(a.childNodes).filter(e=>e.nodeType===3).map(e=>j(e.textContent)).filter(Boolean).join(" ").trim()||j(a.textContent)}function Se(a,e){return j(a.getAttribute(e))}function Ce(a,e){let t=a.getAttribute(e);if(!t){const r=a.getAttributeNames().find(n=>n.includes(e));r&&(t=a.getAttribute(r))}return j(t)}function xe(a){return a.value}function De(a,e){if(!e)return;const t=j(a.textContent)?.toLowerCase(),r=e.toLowerCase();if(!(t!==r&&t!==`${r}:`))return j(a.nextElementSibling?.textContent??a.nextSibling?.textContent)}function j(a){if(a)return a?.replace(/(\n|\t)/g," ").trim()||void 0}var Te=(a=>(a[a.reading=1]="reading",a[a.paused=2]="paused",a[a.plan=3]="plan",a[a.completed=4]="completed",a[a.dropped=5]="dropped",a[a.deleted=6]="deleted",a))(Te||{}),U=(a=>(a.id="id",a.name="name",a.slug="slug",a))(U||{}),F=(a=>(a.blank="about:blank",a.title="meta.title",a.reader="meta.reader",a))(F||{}),Me=(a=>(a[a.string=1]="string",a[a.number=2]="number",a[a.bool=3]="bool",a[a.selection=4]="selection",a))(Me||{}),Pe=(a=>(a[a.pending=0]="pending",a[a.completed=1]="completed",a[a.offline=2]="offline",a[a.incompat=3]="incompat",a))(Pe||{});const _e=/(vol(ume)?|season)(\s*|-|\.)(\d+)/i,Ne=/(ch(ap(t(er)?|\.)?|\.)?|^#|episode\.?)(\s*|-)(\d+([_-~,.]\d+)?)/i,Ie=/\d+([_-~,.]\d+)?/,Be=/[_-~,]/;function P(a){if(!a||!a)return;if(!isNaN(+a))return{chap:+a};const e=a.match(_e),t=e?.[0]?a.replace(e[0],"").trim():a,r=t.match(Ne),n=t.match(Ie),s=r?.[6]??n?.[0];if(!s)return;const i=+s.replace(Be,".");if(isNaN(i))return;const o=e?.[4];return{vol:o&&!isNaN(+o)?+o:void 0,chap:i}}function _(a){return a.sort((e,t)=>e.vol===void 0||t.vol===void 0?t.chap-e.chap:t.vol-e.vol||t.chap-e.chap),Le(a)}function Le(a){const e={};for(let t=a.length-1;t>=0;t--){const r=a[t],n=r.lang??"";r.vol!==void 0?e[n]=r.vol:e[n]!==void 0&&(r.inferVol=e[n])}return a}const je=[{regex:/(sec|giây)/,seconds:1},{regex:/(min|phút)/,seconds:60},{regex:/(hour|giờ)/,seconds:3600},{regex:/(day|ngày)/,seconds:86400},{regex:/(week|tuần)/,seconds:604800},{regex:/(month|tháng)/,seconds:2592e3},{regex:/(year|năm)/,seconds:31536e3}];function G(a){const e=a?.toLowerCase();if(!e||e.includes("now"))return Date.now();if(e.includes("yesterday"))return Date.now()-864e5;const t=new Date(e);if(t instanceof Date){const s=t.valueOf();if(!isNaN(s))return t.getHours()===0&&t.getMinutes()===0?Math.min(Date.now(),s+432e5):s}const r=je.find(s=>s.regex.test(e));if(!r)return;const n=e.split(" ").filter(Boolean);for(let s=0;s<n.length;s++){const i=n[s],o=i==="a"||i==="an"?1:+i;if(!o)continue;if(o<0)return;const l=Date.now()-o*r.seconds*1e3;return l>0?l:void 0}}function V(a,e=location.origin){if(!a)return;const t=new URL(a.startsWith("//")?`${location.protocol}${a}`:a,location.origin+location.pathname).toString();return t.startsWith(e)?t.replace(e,""):t}function Y(a,e){if(!a)return"/";const t=a.replace("{titleSlug}",e),r=t.endsWith("/")?t:t+"/";return r.startsWith("/")?r:"/"+r}function Ae(a,e){const t=[...e],r=[];let n=-1,s=-1;for(let o=0;o<a.length&&!(!t.length&&o>=10);o++){const l={...a[o]},c=t.findIndex(g=>g.slug===l.slug&&g.name===l.name),u=c===-1?void 0:t.splice(c,1)[0],p=!u||u.chapters[0]?.chap!==l.chapters[0]?.chap;c!==-1&&(s=o),p&&(n=o,l.changed=!0),r.push(l)}if(n===-1)return[];if(t.length&&t.length!==e.length){const o=Math.max(10,s+1);r.splice(o);for(let l=s+1;l<r.length;l++)r[l].changed=!1;return r}const i=Math.min(Math.max(n+1,10),Math.max(s+1,100));return r.slice(0,i)}function Oe(a,e){const t={};return a.forEach(r=>{const n=r.chapters.reduce((s,i)=>{const o=i.lang||e||"";return s[o]||(s[o]=[]),s[o].push(i),s},{});Object.entries(n).forEach(([s,i])=>{const o=`${r.slug}:${s}`;t[o]?(t[o].chapters.push(...i),_(t[o].chapters)):t[o]={...r,lang:s===""?void 0:s,chapters:i}})}),Object.values(t)}var b=(a=>(a.title="title",a.reader="reader",a.releases="releases",a.chapters="chapters",a.search="search",a))(b||{}),ke=Object.defineProperty,ze=(a,e,t)=>e in a?ke(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,N=(a,e,t)=>(ze(a,typeof e!="symbol"?e+"":e,t),t);class z{constructor(e){N(this,"spec"),N(this,"siteMeta"),N(this,"tags"),N(this,"context"),N(this,"methodsMap",{[b.title]:()=>this.getRawTitleData(),[b.reader]:()=>this.getRawReaderData(),[b.releases]:()=>this.getRawReleasesData(),[b.search]:()=>this.getRawSearchData(),[b.chapters]:()=>this.getRawChaptersData()}),N(this,"normalizedTagsMap"),this.spec=e.spec,this.siteMeta=e.siteMeta,this.tags=e.tags,this.context=e.context}async getRawSearchData(){throw new Error("Unimplemented")}async getRawPageByType(e,t=!1){const r=await this.methodsMap[e](),n=!r&&qe(this.spec);if(t&&!r&&!n)return;const s=location.origin+location.pathname;return{type:e,is404:n,specId:this.spec.id,siteName:h(this.spec.name),url:s,data:r,spec:this.spec,context:this.context}}resolveReaderSlug(e,t,r){const n=t.endsWith("/")?t.slice(0,-1):t;return n.startsWith(e)?n.replace(e,""):n}resolveTitleSlug(e){if(typeof e!="string")return;const t=$(e)?.split("/").filter(Boolean);return!t||!t.length?e:t[t.length-1]}finalizeRawReleasesData(e){const t=this.spec.releases?.title?.lang?this.siteMeta.defaultLang:void 0,r=Oe(e.rawReleases,t);if(r.length)return{rawReleases:this.context?.oldRawReleases?Ae(r,this.context.oldRawReleases):r}}getTagIdsFromNames(e){if(!e?.length)return;const t=this.normalizedTagsMap??(this.normalizedTagsMap=Ee(this.tags)),r=e.map(n=>t[J(n)]).filter(Boolean);return r.length===0?void 0:Array.from(new Set(r)).sort((n,s)=>n-s)}}N(z,"specId");function Ee(a){const e={};return a.forEach(({id:t,name:r,altNames:n})=>{e[J(r)]=t,n&&n.forEach(s=>{e[J(s)]=t})}),e}function J(a){const e=a.toLowerCase().replaceAll(" ","").replaceAll("-","");return e[e.length-1]==="s"?e.substring(0,e.length-1):e}function qe(a){return a[404]&&document.querySelector(a[404])?!0:document.title.toLowerCase().includes("not found")}class R extends z{async getRawReleasesData(){if(!this.spec?.releases?.title)return;const{chapter:e,...t}=this.spec.releases.title,r=await C(t.sel,{lazy:!0,all:!0});if(!r?.length)return;const n=r.slice(0,100).map(i=>{const o=h(t.url,{root:i}),l=$(o),c=h(t.name,{root:i}),u=h(t.at,{root:i});if(!(!l||!c))return{titleEl:i,id:h(t.id,{root:i}),path:l,name:c,lang:h(t.lang,{root:i})?.toLowerCase(),at:u?G(u):void 0}}).filter(Boolean);if(!n.length)return;const s=[];return await Promise.all(n.map(async i=>{const{path:o,titleEl:l,lang:c,at:u,...p}=i,g=this.resolveTitleSlug(o);if(!g)return;const f=await this.getChapters(e,{root:l,titleSlug:g})??[];s.push({slug:g,chapters:c||u?f.map(m=>({...m,lang:m.lang??c,ts:m.ts??u})):f,...p})})),this.finalizeRawReleasesData({rawReleases:s})}async getRawTitleData(){const e=this.spec.title;if(!e||e.sel&&!await C(e.sel,{lazy:!!e.lazy}))return;const t=h(e.name);if(!t){await new Promise(l=>setTimeout(l,9e4));return}const r=this.resolveTitleSlug(location.pathname);if(!r)return;let n=h(e.tags,{returnAll:!0})??[];n.length===1&&(n=n[0].split(",").map(l=>l.trim()).filter(Boolean));const s=h(e.type),i=h(e.langs,{returnAll:!0})?.map(l=>l.toLowerCase()),o=await this.getChapters(e.chapter,{lazy:!0,titleSlug:r})??[];return{id:h(e.id),url:location.origin+location.pathname,slug:r,name:t,langs:i?.length?i:e.langs&&this.siteMeta.defaultLang?[this.siteMeta.defaultLang]:void 0,tags:this.getTagIdsFromNames([...n??[],...s?[s]:[]]),chapters:o,img:V(h(e.img))}}async getRawReaderData(){const{spec:e,siteMeta:t}=this;if(!e?.reader||e.generic&&!await R.isReaderPage(e.reader))return;const r=e.reader.content;if(!(!r||await R.verifyImgsLocator(r)))return;const n=e.reader.title,s=document.querySelector(n.sel);if(!s)return;const i=h(n.name,{root:s}),o=h(n.url,{root:s}),l=this.resolveTitleSlug(o),c=h(n.img,{root:s});if(!i||!o||!l)return;const u=!!this.context?.disableLazyChapters,p=await this.getChapters(e.reader?.chapter,{titleSlug:l,lazy:!u,timeoutMs:12e4})??[],g=h(e.reader.label)?.toLowerCase().replace(i.toLowerCase(),"");if(!g)return;const{vol:f,chap:m=0}=P(g)||{},w=Y(t.readerBase,l),v=t.readerBase.split("/").indexOf("{lang}"),y=v!==-1?location.pathname.substring(1).split("/")[v]?.toLowerCase():void 0,d=y?w.replace("{lang}",y):w,T=y??h(e.reader.lang)?.toLowerCase()??(e.reader.lang?this.siteMeta.defaultLang:void 0);return this.finalizeRawReaderData({vol:f,chap:m,lang:T,slug:this.resolveReaderSlug(d,location.pathname,location.href),basePath:d,imgsLocator:e.reader.imgs,title:{id:h(n.id),url:o,slug:l,name:i,langs:T?[T]:void 0,img:V(c),chapters:p,hasMoreChapters:!p.length&&u}},{prevSlug:this.findNeighborChapter({sel:e.reader.prev,basePath:d}),nextSlug:this.findNeighborChapter({sel:e.reader.next,basePath:d})})}async getRawChaptersData(){const e=this.siteMeta.chapters;if(e===F.blank)return;const t=e===F.reader?(await this.getRawReaderData())?.title:await this.getRawTitleData();if(!t)return;const r=this.context?.lang,{chapters:n}=t,s=r?n.filter(i=>!i.lang||i.lang===r):n;return{chapters:s,title:{...t,chapters:[]},hasMore:!1,asc:!1,total:s.length}}async getRawSearchData(){const e=this.spec.search?.title;if(!e)return;const{chapter:t}=e,r=[];return await Promise.all(Array.from(document.querySelectorAll(e.sel)).map(async n=>{const s=h(e.url,{root:n}),i=$(s),o=h(e.name,{root:n}),l=this.resolveTitleSlug(i);!i||!o||!l||r.push({slug:l,name:o,chapters:await this.getChapters(t,{root:n,titleSlug:l})??[]})})),r.length?{rawReleases:r}:void 0}async getChapters(e,{root:t=document.documentElement,titleSlug:r="",lazy:n=!0,timeoutMs:s}){if(!e)return;const i=[],o=await C(e.sel,{root:t,all:!0,lazy:n,timeoutMs:s});if(!o?.length)return i;const l=(o??[]).map(w=>({id:h(e.id,{root:w}),label:h(e.label,{root:w}),url:h(e.url,{root:w}),at:h(e.at,{root:w})})),c=l.map(({label:w})=>P(w)),u=c[1]?.chap;!c[0]&&(u===void 0||u<=1)&&(c[0]={chap:0});const{readerBase:p}=this.siteMeta,g=Y(p,r),f=p.split("/").indexOf("{lang}"),m=f!==-1;return c.forEach((w,v)=>{if(!w)return;const{id:y,url:d,at:T}=l[v],A=d?.startsWith("http")&&!d.startsWith(location.origin),O=A?d:$(d);if(!O)return;const k=!A&&m?O?.substring(1).split("/")[f]?.toLowerCase():void 0,S=A?O:this.resolveReaderSlug(k?g.replace("{lang}",k):g,O,d);i.push({...w,id:y,slug:S,lang:k,ts:G(T)||i[i.length+1]?.ts||Date.now()})}),_(i)}static async isReaderPage(e){return!!e.sel&&!!await C(e.sel,{lazy:!!e.lazy})}static async verifyImgsLocator(e){const t=e.split(",").map(r=>r.trim()).filter(Boolean).map(r=>`${r} img, ${r} canvas`).join(",");return!!await C(t,{lazy:!0,all:!1})}findNeighborChapter({sel:e,basePath:t}){const r=h(e);if(!r||r.startsWith("#")||r.startsWith("/#"))return;const n=$(r);return n?this.resolveReaderSlug(t,n,r):void 0}finalizeRawReaderData(e,{prevSlug:t,nextSlug:r}={}){const n=e.title?.chapters;if(!n?.length){const c=P(t),u=P(r);return!c&&!u?e:{...e,prev:c?{...c,slug:t}:void 0,next:u?{...u,slug:r}:void 0}}let s,i,o,l;for(let c=0;c<n.length&&!(s&&(!t||o)&&!r&&l);c++){const u=n[c];!s&&(e.slug==u.slug||e.chap===u.chap&&(e.vol===u.vol||e.vol===void 0))?(s=u,i=c):!o&&t===u.slug?o=u:!l&&r===u.slug&&(l=u)}return i!==void 0&&(o??(o=n[i+1]),l??(l=n[i-1])),{...e,inferVol:s?.inferVol,prev:o,next:l}}}var We=Object.defineProperty,Ue=(a,e,t)=>e in a?We(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Fe=(a,e,t)=>(Ue(a,typeof e!="symbol"?e+"":e,t),t);class Q extends R{resolveTitleSlug(e){return $(e)?.split("/").filter(Boolean)[1]}}Fe(Q,"specId","bato");function Ve(){return Math.random().toString(16).slice(2)}async function Je({addListener:a,removeListener:e,transform:t,filter:r,handler:n,onTimeout:s,timeout:i,once:o}){return new Promise(l=>{a(p);const c=()=>o===!0&&e(p),u=i?setTimeout(()=>{c(),l(void 0),s?.()},i):void 0;async function p(g,...f){g=t?t(g):g,g!==void 0&&(!r||r(g,...f))&&(c(),l(g),n?.(g,...f),u&&clearTimeout(u))}})}async function He(a){return(await Je({addListener:e=>window.addEventListener("message",e),removeListener:e=>window.removeEventListener("message",e),...a}))?.data}async function Xe(a){const{receiverWindow:e,timeout:t,targetOrigin:r,event:n,args:s}=a,i={reqId:Ve(),event:n,args:s};return(e||window)?.postMessage(i,r??"*"),(await He({filter:o=>o?.data?.resId===i.reqId,timeout:t??3e4,once:!0}))?.result}const D={isAny:!0};function M(a,...e){return Xe({event:"tk:fetchResult",args:{baseUrl:a,segments:e}})}function Ge(a){if(a)try{return JSON.parse(a)}catch{return}}var Ye=Object.defineProperty,Qe=(a,e,t)=>e in a?Ye(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Z=(a,e,t)=>(Qe(a,typeof e!="symbol"?e+"":e,t),t);const H=class q extends R{async getRawReleasesData(){let e=[];try{e=await(await fetch(`${q.apiBase}chapter?accept_erotic_content=true&page=1&order=new`)).json()}catch{return}const t=[];return e.forEach(r=>{const{vol:n,chap:s,hid:i,lang:o,updated_at:l,md_comics:c}=r,u=typeof s=="string"&&!isNaN(+s)?+s:void 0;typeof u=="number"&&t.push({id:c.hid,slug:c.slug,name:c.title,chapters:[{slug:i,vol:typeof n=="string"&&!isNaN(+n)?+n:void 0,chap:u,lang:o,ts:new Date(l).valueOf()}]})}),super.finalizeRawReleasesData({rawReleases:t})}async getRawTitleData(){const e=await super.getRawTitleData();if(!e)return e;const t=await M(`https://api.${location.host}`,"comic",D,"chapters");if(!t)return e;const r=await Ke(e.slug),n=K(t),s=h("h1 ~ div.text-sm span:first-child|row:demographic"),i=s?this.getTagIdsFromNames([s])?.[0]:void 0;return i&&!e.tags?.includes(i)&&(e.tags?.push(i),e.tags?.sort((o,l)=>o-l)),{...e,img:e.img??V(h(this.spec.title?.img)),id:r,hasMoreChapters:n?.hasMore??!1,chapters:n?.chapters??[]}}async getRawReaderData(){const e=await super.getRawReaderData();if(!e)return e;const t=await M("/_next/data/",D,"comic",D),r=t?.comic?.hid,n=t?.comic?.md_comic_md_genres?.map?.(i=>i?.md_genre?.name),s=t?.comic?.md_covers?.[0]?.b2key;return{...e,lang:e.lang&&e.lang?.length<=6?e.lang:q.getLangFromReaderSlug(e.slug)||e.lang,title:{...e.title,id:r?r+"":void 0,tags:this.getTagIdsFromNames(n),img:typeof s=="string"?`https://meo.comick.pictures/${s}`:void 0}}}static getLangFromReaderSlug(e){const t=e.split("-");let r;for(let n=t.length-1;n>0;n--){const s=t[n];if(!isNaN(+s))break;r=r?`${s}-${r}`:s}return r&&r.length<=6?r:void 0}async getRawChaptersData(){if(!this.context?.rawId)return;const{rawId:e,lang:t="en",skip:r}=this.context,n=r?Math.floor(r/1e3)+1:void 0;try{const s=await fetch(`${q.apiBase}comic/${e}/chapters?lang=${t}&limit=1000${n&&n>1?`&page=${n}`:""}`),i=K(await s.json());return i?{...i,lang:t,asc:!1}:void 0}catch{return}}};Z(H,"specId","comick"),Z(H,"apiBase","https://api.comick.cc/");let Ze=H;function K(a){if(!Array.isArray(a?.chapters))return;const e=[];return a.chapters.forEach(t=>{const{vol:r,chap:n,hid:s,lang:i,updated_at:o}=t,l=typeof n=="string"&&!isNaN(+n)?+n:void 0;typeof l!="number"||e.some(c=>c.vol==r&&c.chap===l&&c.lang===i)||e.push({slug:s,vol:typeof r=="string"&&!isNaN(+r)?+r:void 0,chap:l,lang:i,ts:new Date(o).valueOf()})}),{chapters:_(e),total:a.total??e.length,hasMore:a.total>a.limit}}async function Ke(a){const e=document.querySelector("script#__NEXT_DATA__")?.textContent,t=e?Ge(e):void 0;return t?.query?.slug===a?t?.props?.pageProps?.comic?.hid??void 0:(await M("/_next/data/",D,"comic",a,"covers.json"))?.pageProps?.comic?.hid??void 0}var et=Object.defineProperty,tt=(a,e,t)=>e in a?et(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,at=(a,e,t)=>(tt(a,typeof e!="symbol"?e+"":e,t),t);class ee extends R{async getRawReleasesData(){const e=await this.getVM();if(!e)return super.getRawReleasesData();const t=e.LatestJSON.slice(0,100).map(r=>{const n=+r.Chapter.substring(1)/10;return{slug:r.IndexName,name:r.SeriesName,chapters:[{chap:n,slug:`${r.IndexName}-chapter-${n}.html`,ts:new Date(r.Date).valueOf()}]}});return this.finalizeRawReleasesData({rawReleases:t})}resolveTitleSlug(e){const t=super.resolveTitleSlug(e);if(!(!t||t.includes("{")))return t}async getRawTitleData(){const e=await super.getRawTitleData();return e&&{...e,chapters:te(await this.getVM(),e.slug),hasMoreChapters:!1}}resolveReaderSlug(e,t){return super.resolveReaderSlug(e,t).replace(/-page-\d{1,3}\.html\/?$/,".html")}async getRawReaderData(){const e=await this.getVM();if(!e)return;const t=document.querySelector(".ImageGallery img.img-fluid")?.getAttribute("ng-src"),r=e.IndexName,n=ae(e.CurChapter,r);return this.finalizeRawReaderData({chap:n.chap,slug:n.slug,imgs:rt(e,t??void 0),basePath:"/"+this.siteMeta.readerBase.replace("{titleSlug}",r)+"/",title:{name:e.SeriesName,slug:r,url:`/${this.siteMeta.titleBase}/${r}`,chapters:te(e,r),hasMoreChapters:!1}})}getVM(){return x(50,100,()=>window.angular?.element?.(document.documentElement)?.scope()?.vm)}}at(ee,"specId","manga4life");function te(a,e){return(a?.Chapters??a?.CHAPTERS??[]).sort((t,r)=>r.Chapter-t.Chapter).map(t=>ae(t,e))}function ae(a,e){const t=+a.Chapter.substring(1)/10;return{slug:`${e}-chapter-${t}.html`,chap:t,ts:new Date(a.Date).valueOf()}}function rt(a,e){let t=e?.split(".").slice(-1)[0]??"png";t=t.length>=3&&t.length<=4?t:"png";try{const r=a.CurChapter.Chapter.slice(1,-1),n=a.CurChapter.Chapter[a.CurChapter.Chapter.length-1],s=n!=="0"?`${r}.${n}`:r,i=`https://${a.CurPathName}/manga/${a.IndexName}/${a.CurChapter.Directory?`${a.CurChapter.Directory}/`:""}${s}-`;return a.Pages.map(o=>{const l=(o+"").padStart(3,"0");return`${i}${l}.${t}`})}catch{return}}var nt=Object.defineProperty,st=(a,e,t)=>e in a?nt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,it=(a,e,t)=>(st(a,typeof e!="symbol"?e+"":e,t),t);class re extends z{resolveTitleSlug(e){return $(e)?.split("/").filter(Boolean)[1]}async getRawReleasesData(){let e=[];try{e=(await(await fetch("https://api.mangadex.org/chapter?limit=96&offset=0&includes[]=manga&contentRating[]=safe&contentRating[]=suggestive&contentRating[]=erotica&contentRating[]=pornographic&order[readableAt]=desc")).json()).data}catch{return}const t=[];return e.forEach(({relationships:r,attributes:n,id:s})=>{const i=r.find(({type:c})=>c==="manga"),o=typeof n.volume=="string"?+n.volume:void 0,l=typeof n.chapter=="string"?+n.chapter:void 0;l&&t.push({slug:i.id,name:Object.values(i.attributes.title)[0],chapters:[{slug:n.externalUrl||s,vol:o,chap:l,lang:n.translatedLanguage,ts:new Date(n.readableAt).valueOf()}]})}),super.finalizeRawReleasesData({rawReleases:t})}async getRawTitleData(){const e="https://api.mangadex.org/manga/",[t,r]=await Promise.all([M(e,D),M(e,D,"feed")]);if(!t||!r)return;const n=r.data?.map?.(o=>{const{attributes:l,id:c}=o;if(typeof l!="object"||typeof c!="string"||!c)return;const{externalUrl:u,title:p,volume:g,chapter:f,translatedLanguage:m}=l;return{slug:u||c,label:p||void 0,vol:typeof g=="string"?+g:void 0,chap:typeof f=="string"?+f:void 0,lang:m||"en",ts:new Date(l.readableAt).valueOf()}}).filter(o=>o?.chap!=null)??[],{data:s}=t;if(!s)return;const i=se({data:s,getTagIdsFromNames:o=>this.getTagIdsFromNames(o)});if(i)return{...i,chapters:_(n),hasMoreChapters:(r.total||0)>(r.limit||0)}}async getRawReaderData(){const e="https://api.mangadex.org/",[t,r,n]=await Promise.all([M(e,"chapter",D),M(e,"at-home","server",D),M(e,"manga",D,"aggregate")]);if(!t||!r||!n)return;const s=t.data,{volume:i,chapter:o,externalUrl:l,translatedLanguage:c}=s.attributes||{},{baseUrl:u,chapter:{data:p,dataSaver:g,hash:f}}=r,m=s.relationships?.find?.(S=>S.type==="manga");if(!m)return;const w=se({data:m,getTagIdsFromNames:S=>this.getTagIdsFromNames(S)});if(!w||typeof n.volumes!="object")return;const v=ne(n)??[];(typeof o!="string"||o==="none")&&!v.length&&v.push({chap:0,slug:s.id});const y=v.findIndex(S=>S.slug===s.id),d=s.relationships?.find?.(S=>S.type==="scanlation_group"),T=u.endsWith("/")?u:u+"/",A=!!localStorage.getItem("md")?.includes?.('"dataSaver":true'),O=`${T}${A?"data-saver":"data"}/`,k=((A?g:p)??[]).map?.(S=>`${O}${f}/${S}`)??[];return{externalUrl:l,vol:typeof i=="string"?+i:void 0,inferVol:v[y]?.inferVol,chap:+o||0,imgs:k,lang:c,slug:s.id,prev:v[y+1],next:v[y-1],basePath:"/chapter/",groupName:d?.attributes?.name,groupUrl:d?.attributes?.website,isWebtoon:m?.attributes?.tags?.some(S=>S.attributes.name.en==="Long Strip"),title:{...w,chapters:v}}}async getRawChaptersData(){if(!this.context)return;const{titleSlug:e,lang:t="en"}=this.context;let r;try{const n=await fetch(`https://api.mangadex.org/manga/${e}/aggregate?translatedLanguage[]=${t}`);r=ne(await n.json())}catch{return}if(r)return{chapters:r,lang:t,asc:!1,hasMore:!1,total:r.length}}}it(re,"specId","mangadex");function ne(a){if(typeof a.volumes!="object")return;const e=Object.values(a.volumes).map(({volume:t,chapters:r})=>{const n=t==="none"||typeof t!="string"?void 0:+t;return Object.values(r).map(({id:s,chapter:i})=>typeof i!="string"||i==="none"?void 0:{vol:n,chap:+i,slug:s})}).flat().filter(Boolean).reverse();return _(e)}function se({data:a,getTagIdsFromNames:e}){const{id:t,attributes:r,relationships:n}=a;if(!t||typeof t!="string"||typeof r!="object")return;const{title:s,availableTranslatedLanguages:i,altTitles:o,tags:l,contentRating:c}=r;if(typeof s!="object"||i&&!Array.isArray(i))return;const u=Object.values(s)[0];if(!u||typeof u!="string")return;const p=ot(),g=(i??[])?.map?.(d=>typeof d=="string"?d:void 0).filter(Boolean)??[],f=g.filter(d=>d&&(!p||p.includes(d))),m=o?.map?.(d=>{const[[,T]=[]]=Object.entries(d);return T}),w=n?.find?.(d=>d.type==="cover_art")?.attributes?.fileName,v=w?`https://mangadex.org/covers/${t}/${w}`:void 0,y=(l||[]).map(d=>d?.attributes?.name?.en).concat(c).filter(Boolean);return{url:`${location.origin}/title/${t}`,slug:t,name:u,altNames:m,langs:f.length>0?f:g.length>0?g:["en"],img:v,tags:e(y)}}function ot(){const a=localStorage.getItem("md");if(a)try{const e=JSON.parse(a)?.userPreferences?.filteredLanguages;return e?.length?e:void 0}catch{return}}var lt=Object.defineProperty,ct=(a,e,t)=>e in a?lt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,ut=(a,e,t)=>(ct(a,typeof e!="symbol"?e+"":e,t),t);class ie extends R{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return{...e,rawReleases:e.rawReleases.map(t=>({...t,id:t.id?.split("?")[0]}))}}async getRawReaderData(){if((await C(".current-viewtype",{lazy:!0,all:!1}))?.textContent?.trim().toLowerCase()!=="volume")return await super.getRawReaderData()}async getRawChaptersData(){const e=this.context?.lang;if(!e)return;const t=await C(`.tab-content[data-name="chapter"] a.dropdown-item[data-code="${e.toUpperCase()}"]`,{lazy:!0,all:!1});if(t)return t.click(),await C(`.tab-content[data-name="chapter"] li.item[data-number] a[href*="/${e}/"]`,{lazy:!0,all:!1}),await super.getRawChaptersData()}}ut(ie,"specId","mangafire");var gt=Object.defineProperty,pt=(a,e,t)=>e in a?gt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,ht=(a,e,t)=>(pt(a,typeof e!="symbol"?e+"":e,t),t);class oe extends R{async getRawReaderData(){const e=await super.getRawReaderData();return e&&{...e,imgs:await this.getImgs()}}resolveReaderSlug(e,t){const r=super.resolveReaderSlug(e,t),n=r.split("/").filter(Boolean);return n[n.length-1].startsWith("pg-")?n.slice(0,-1).join("/"):r}async getImgs(){const e=await x(100,20,()=>window.imgsrcs),t=window.CryptoJS,r=t.enc.Hex.parse("e11adc3949ba59abbe56e057f20f883e"),n={iv:t.enc.Hex.parse("1234567890abcdef1234567890abcdef"),padding:t.pad.ZeroPadding};return t.AES.decrypt(e,r,n).toString(t.enc.Utf8).split(",")}}ht(oe,"specId","mangago");var dt=Object.defineProperty,ft=(a,e,t)=>e in a?dt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,mt=(a,e,t)=>(ft(a,typeof e!="symbol"?e+"":e,t),t);class le extends z{async getRawReleasesData(){throw new Error("Unimplemented")}async getRawTitleData(){const e=await this.getPageData();if(!e)return;const t=await this.getPrefLangs()??["en"],r=e.chart_count_lang_to_serials?.find(s=>t?.includes(s?.field))?.count,n=await this.getTitleChapters();return{...this.transformRawTitleData(e),chapters:n,hasMoreChapters:r&&r>n.length}}async getRawReaderData(){const e=await this.getPageData(),t=e?.comicNode?.data,r=e?.imageSet;if(!e||!t||!r)return;const{httpLis:n,wordLis:s}=r,i=this.transformRawTitleData(t);return{slug:location.pathname.split("/").filter(Boolean)[2],lang:e.lang,vol:e.volume??void 0,chap:e.serial,imgs:n.map((o,l)=>`${o}?${s[l]}`),title:{...i,chapters:[],hasMoreChapters:!1},...await this.getReaderPrevNext(),basePath:`/title/${i.slug}/`}}async getRawChaptersData(){if(!this.context)return;const{lang:e,titleSlug:t,skip:r}=this.context;if(!e||!t)return;const n=await this.getPrefLangs()??["en"];let s;try{s=await fetch("https://mangapark.net/apo/",{method:"POST",body:JSON.stringify({query:"query get_content_comic_chapters($comicId: Int!, $isPref: Boolean) { get_content_comic_chapters(comicId: $comicId, isPref: $isPref) {serial chapters{lang cids}}}",variables:{comicId:+t,isPref:n.includes(e)},operationName:"get_content_comic_chapters"}),headers:{"Content-Type":"application/json"}})}catch{return}const i=[],o=(await s.json()).data.get_content_comic_chapters.reverse();return(r?o.slice(r):o).forEach(l=>{const c=l.chapters.find(g=>g.lang===e);if(!c)return;const u=c.cids?.[0];if(!c||!u)return;const p=l.serial;i.push({slug:`${u}-${e}-ch.${p}`,chap:p,ts:l.datePublic})}),{chapters:i,lang:e,asc:!1,hasMore:!1,total:i.length}}transformRawTitleData(e){return{url:e.urlPath,slug:e.id+"",name:e.name,langs:e.chart_count_lang_to_serials?.map?.(t=>t?.field?.toLowerCase()).filter(Boolean),img:e.urlCover300??e.urlCover600??e.urlCoverOri,tags:this.getTagIdsFromNames(e.genres)}}async getReaderPrevNext(){let e,t;return await x(20,100,async()=>{const r=await C("main a.btn",{lazy:!0,all:!0});if(r?.length)return e=r.find(n=>n.textContent?.toLowerCase().includes("prev")),t=r.find(n=>n.textContent?.toLowerCase().includes("next")),e||t?!0:void 0}),{prev:this.getChapterFromBtn(e),next:this.getChapterFromBtn(t)}}getChapterFromBtn(e){const t=e?.getAttribute("href");if(!t)return;const r=t.split("/").filter(Boolean).slice(-1)[0];if(!r)return;const n=P(r.split("-").slice(2).join("-"));if(n)return{slug:r,lang:r.split("-")[1]||void 0,...n}}async getTitleChapters(){const e=[],t=await C(".file-list-by-serial time[time]",{lazy:!0,all:!0});if(!t?.length)return e;let r;return t.forEach(n=>{const s=n.parentElement;for(let i=0;i<5;i++){const o=s?.parentElement?.querySelector('a[href*="/title/"]');if(!o)continue;const l=o.getAttribute("href")?.split("/").filter(Boolean)[2],c=o.textContent?.replace(/(\n|\t)/g," ").trim(),u=P(c);if(!u||!l||r&&r.chap==u.chap&&(r.vol??0)==(u.vol??0))break;const p=+n.getAttribute("time");r={...u,slug:l,lang:l.split("-")[1]||void 0,ts:p===p&&typeof p=="number"?p:void 0},e.push(r);break}}),_(e)}getPageData(){return x(100,50,()=>window.__NEXT_DATA__?.props?.pageProps?.dehydratedState?.queries?.[0]?.state?.data?.data)}getPrefLangs(){return x(40,50,()=>{const e=window.__NEXT_DATA__?.props?.pageProps;if(!e)return;const t=e?.extra?.sets?.general_prefLangs?.filter(Boolean);return t?.length?t:["en"]})}}mt(le,"specId","mangapark");function ce(a,e){const t=a[0]===e?a.substring(1):a;return t[t.length-1]===e?t.substring(0,t.length-1):t}var wt=Object.defineProperty,yt=(a,e,t)=>e in a?wt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,vt=(a,e,t)=>(yt(a,typeof e!="symbol"?e+"":e,t),t);class ue extends R{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return{...e,siteMeta:bt(this.spec.releases,this.siteMeta)}}async getRawTitleData(){const e=await super.getRawTitleData();if(!e)return;const t=I(location.pathname);let r;if(e.chapters?.length){const n=this.spec.title.chapter,s=document.querySelector(n.sel),i=$(h(n.url,{root:s}));i&&(r=I(i))}return{...e,siteMeta:E(this.siteMeta,{titleBase:t,readerBase:r})}}async getRawReaderData(){const e=await super.getRawReaderData();if(e)return{...e,siteMeta:E(this.siteMeta,{titleBase:I($(e.title.url)),readerBase:I(location.pathname),idBase:ge()}),title:{...e.title,id:await this.getReaderTitleId()}}}async getRawSearchData(){const e=await super.getRawSearchData();if(!e)return;const t=this.spec.search.title,r=document.querySelector(t.sel),n=h(t.url,{root:r});return{...e,siteMeta:E(this.siteMeta,{titleBase:I($(n)),idBase:ge()})}}async getReaderTitleId(){const e=await window.HISTORY?.getStored?.();if(!e||typeof e!="object")return;const t=Object.values(e).filter(Boolean);if(t.length)return t.sort((r,n)=>n.time-r.time),t[0].manga_ID}}vt(ue,"specId","mangastream");function bt(a,e){if(!a)return;const t={...e,releases:ce(location.pathname,"/")},r=a.title,n=document.querySelector(r.sel)??void 0;if(!n)return;const s=$(h(r.url,{root:n}));if(s===void 0)return;const i=n.querySelector(r.chapter.sel)??void 0;if(!i)return;const o=$(h(r.chapter.url,{root:i}));if(o!==void 0)return t.titleBase=I(s),t.readerBase=I(o),e.titleIdType===U.id&&(h(r.id,{root:n})||(e.titleIdType=U.name)),E(e,t)}function ge(){return document.querySelector('link[rel="shortlink"][href*="/?p="]')?"?p=":void 0}function E(a,e){const t=Object.keys(e),r={...a};let n=!1;return t.forEach(s=>{const i=e[s];i!==a[s]&&(r[s]=i,n=!0)}),n?r:void 0}function I(a){return ce(a,"/").split("/").slice(0,-1).join("/")}var Rt=Object.defineProperty,$t=(a,e,t)=>e in a?Rt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,St=(a,e,t)=>($t(a,typeof e!="symbol"?e+"":e,t),t);class pe extends R{async getRawReaderData(){const e=await super.getRawReaderData();if(!e)return e;let t=e.title.id;if(!t){const n=this.spec.reader.title;n.id&&await C(n.id.split("|")[0],{lazy:!0}),t=h(n.id)}const r=!!this.context?.disableLazyChapters;return{...e,title:{...e.title,id:t,chapters:r?[]:await Ct(t),hasMoreChapters:r}}}resolveTitleSlug(e){const t=super.resolveTitleSlug(e);if(!t)return;const r=t.lastIndexOf("-"),n=+t.substring(r+1);return r===-1||isNaN(n)||n<1e3?t:t.substring(0,r)}}St(pe,"specId","nettruyen");async function Ct(a){if(!a)return[];const e=await fetch(`/Comic/Services/ComicService.asmx/ProcessChapterList?comicId=${a}`).then(t=>t.status===200?t.json():void 0).catch(()=>[]);return e?.chapters?.length?_(e.chapters.map(t=>{const{name:r,url:n}=t,s=P(r);if(!(!s||!n))return{slug:$(n).split("/").filter(Boolean).slice(2).join("/"),...s}})):[]}var xt=Object.defineProperty,Dt=(a,e,t)=>e in a?xt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Tt=(a,e,t)=>(Dt(a,typeof e!="symbol"?e+"":e,t),t);class he extends R{async getRawTitleData(){const e=await super.getRawTitleData();return e&&{...e,hasMoreChapters:!!X()}}async getRawChaptersData(){const e=await this.getRawTitleData();if(!e?.hasMoreChapters)return e;const t=this.context?.findContinue;if(t){const l=await this.findContinueChapters({rawTitleData:e,chapter:t});return l?{chapters:l,title:{...e,chapters:[]}}:void 0}const r=this.context?.skip,{chapters:n,...s}=e,i=n.length,o=r&&r>=i?Math.floor(r/i)+1:void 0;return o?{chapters:await this.getChaptersByPage({page:o,titleSlug:e.slug})??[],title:{...s,chapters:[]},hasMore:!!X(o),asc:!1,skip:r}:{chapters:n,title:{...s,chapters:[]},hasMore:!!X()}}async findContinueChapters({rawTitleData:e,chapter:{chap:t},curPage:r=1,cacheChaptersByPage:n={},...s}){const i=n[r]??e.chapters,o=i[i.length-1].chap<=t,l=s.maxPage??Mt();if(o){if(i[0].chap>t){const y=[...i].reverse().find(d=>d.chap>t);return y?[y]:i.slice(0,1)}if(r<=1)return i.slice(0,1)}else if(r===l)return i.slice(-1);const c=e.chapters.length,u=Object.keys(n).map(y=>+y).sort((y,d)=>y-d),p=o?-1:1,g=u[u.indexOf(r)+p];if(g===r+p)return o?n[g].slice(-1).concat(i.slice(0,1)):i.slice(-1).concat(n[g].slice(0,1));const f=o?t-i[0].chap:i[0].chap-t,m=Math.floor(f/c)+1,w=o?Math.max(m,(g??1)+1):Math.min(m,(g??l+1)-1,l),v=await this.getChaptersByPage({page:w,titleSlug:e.slug});if(v)return await this.findContinueChapters({rawTitleData:e,chapter:{chap:t},curPage:w,maxPage:l,cacheChaptersByPage:{...n,1:e.chapters,[w]:v}})}async getChaptersByPage({page:e,titleSlug:t}){const r=de(e);if(!r)return;const n=this.spec.title.chapter,s=n.sel,i=document.querySelector(s),o=x(100,30,()=>{const l=document.querySelector(s);if(l&&i!==l)return!0;r.click()});return r.click(),await o,await this.getChapters(n,{lazy:!1,titleSlug:t})}}Tt(he,"specId","reaper");function X(a=1){return de(a+1)}function de(a){const e=`span[wire\\:key="paginator-page-1-page${a}"] button,button[aria-label="Go to page ${a}"]`;return document.querySelector(e)}function Mt(){const a=Array.from(document.querySelectorAll('span[wire\\:key^="paginator-page-"]'));return a.length?+a[a.length-1].getAttribute("wire:key").split("-").slice(-1)[0].replace("page",""):1}var Pt=Object.defineProperty,_t=(a,e,t)=>e in a?Pt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Nt=(a,e,t)=>(_t(a,typeof e!="symbol"?e+"":e,t),t);class fe extends R{async getRawTitleData(){const e=await super.getRawTitleData();if(!e)return;const t=h(".info-detail__row > .genre-btn,.info__right .stats__row:first-child|text",{returnAll:!0})?.map(r=>[r,...r.split(" ")]).flat();return me({...e,tags:this.getTagIdsFromNames(t)??[]},".episode-header .episode-cnt")}async getRawReaderData(){const e=await super.getRawReaderData();if(e)return{...e,title:me({...e.title,url:`${location.origin}/series/${e.title.slug}/info`,tags:[]},".episode-list .js-ep-cnt")}}async getRawChaptersData(){if(!this.context)return;const{rawId:e,skip:t}=this.context,r=1e3,n=t?Math.floor(t/1e3)+1:1;try{const s=await fetch(`/series/${e}/episodes?page=${n}&sort=NEWEST&max_limit=${r}`);return It(await s.json())}catch{return}}resolveTitleSlug(e){if(!e)return;const t=e.split("/").filter(Boolean);return t[1]??t[0]}}Nt(fe,"specId","tapas");function me(a,e){const t=Bt(e)>20;return{...a,chapters:t?[]:a.chapters,hasMoreChapters:t}}function It(a){const e=a?.data?.episodes;if(!Array.isArray(e))return;const t=e.map(n=>({chap:n.pending_scene??n.scene,slug:n.id+"",ts:new Date(n.publish_date)?.valueOf?.()||void 0})),r=a?.data?.pagination;return{chapters:t,total:r?.total??t.length,hasMore:!!r?.has_next}}function Bt(a){return+(document.querySelector(a)?.textContent?.trim().split(" ")[0]||0)}var Lt=Object.defineProperty,jt=(a,e,t)=>e in a?Lt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,At=(a,e,t)=>(jt(a,typeof e!="symbol"?e+"":e,t),t);class we extends R{async getRawTitleData(){const e=new URLSearchParams(location.search),t=e.get("episode_no"),r=e.get("title_no");if(t||!r)return;const n=await super.getRawTitleData();if(!n)return;const s=location.pathname.split("/")[1];return{...n,id:r,langs:[s].filter(Boolean),chapters:n.chapters.map(i=>({...i,lang:s})),hasMoreChapters:(document.querySelector(".paginate")?.childElementCount??1)>1}}async getRawReaderData(){const e=new URLSearchParams(location.search),t=e.get("episode_no"),r=e.get("title_no");if(!t||!r)return;const n=+t;if(n!==n)return;const s=document.title.split("|")[1]?.trim();if(!s)return;const i=location.pathname.split("/"),o=`${i.slice(0,4).join("/")}/list?title_no=${r}`,l=await this.getChapters({sel:"#sequence_scroll li.eg-flick-panel,#toolbar .episode_lst li[data-episode-no]",url:"a|attr:href",label:"|attr:data-episode-no || .num|text"},{lazy:!1}),c=i[1];return{chap:n,lang:c,slug:`${location.pathname}?title_no=${r}&episode_no=${n}`,basePath:"",imgs:await this.getReaderImgs(),isWebtoon:!0,title:{id:r,url:o,slug:o,name:s,langs:[c],chapters:(l??[]).map(u=>({...u,lang:c})),hasMoreChapters:!1}}}async getReaderImgs(){const e=h("#_imageList img|[attr:data-url,attr:src]",{returnAll:!0});return e?.length?e:await x(100,50,()=>window.__viewerState__?.scrollViewerParam?.imageList?.map(({url:t})=>t).filter(Boolean))}resolveReaderSlug(e,t,r){if(!r)return t;if(r.startsWith("http://")||r.startsWith("https://")){const n=W(r);return n.pathname+n.search}return r}}At(we,"specId","webtoon");const Ot=[Q,Ze,ee,re,ue,pe,he,fe,oe,ie,le,we];function ye(a){const e=Ot.find(t=>t.specId===a.spec.id)??R;return new e(a)}async function kt(a){const{spec:e}=a;if(e){const t=a.siteMeta??e.meta,r=a.type?[a.type]:ve(t,e.generic);if(!r.length)return;const n=ye({...a,spec:e,siteMeta:t});return await L(r.map(s=>n.getRawPageByType(s,r.length>1)))}return await L((a.genericSpecs??[]).map(t=>{const r=ve(t.meta,t.generic);if(!r.length)return[];const n=ye({...a,spec:t,siteMeta:t.meta});return r.map(s=>n.getRawPageByType(s,!0))}).flat())}function ve(a,e){if(location.pathname==="/")return[];const{titleBase:t,readerBase:r}=a,n=location.pathname.split("/").filter(Boolean),s=be(n,r),i=be(n,t);if(s!==i)return s>i?[b.reader]:[b.title];if(s>0)return[b.reader,b.title];if(n.length===1){const o=[!r&&b.reader,!t&&b.title].filter(Boolean);if(o.length)return o}return!r&&!t||e?[b.reader,b.title]:[]}function be(a,e){if(!e)return 0;const t=e.split("/").filter(Boolean),r=t.includes("{slug}"),n=a.length-t.length;return r&&n!==0||!r&&n<1?0:t.filter((s,i)=>a[i]===s||s==="{titleSlug}"||s==="{lang}"||s==="{slug}").length}B.PageType=b,B.scrape=kt});
|