trackkun-dom 0.3.3 → 0.3.5

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.
Files changed (3) hide show
  1. package/index.js +1 -1
  2. package/package.json +1 -1
  3. package/specs.json +1 -1
package/index.js CHANGED
@@ -1 +1 @@
1
- (function(W,q){typeof exports=="object"&&typeof module<"u"?q(exports):typeof define=="function"&&define.amd?define(["exports"],q):(W=typeof globalThis<"u"?globalThis:W||self,q(W._trackkun_={}))})(this,function(W){"use strict";function q(r){let e=!1;return new Promise((t,a)=>{Promise.all(r.map(async n=>{const l=await n;!e&&l&&(e=!0,t(l))})).then(()=>{e||t(void 0)})})}function ge(r,{removeTrailingSlash:e=!0}={}){if(!r)return;const t=e&&r.endsWith("/")?r.slice(0,-1):r;try{return new URL(t)}catch{return}}function j(r){var e,t;if(!(!r||typeof r!="string"))return r.startsWith("http://")||r.startsWith("https://")?(e=ge(r))==null?void 0:e.pathname:r.startsWith("//")?(t=ge(`https:${r}`))==null?void 0:t.pathname:r}const Ot={text:St,attr:Pt,"attr-contain":jt,value:Dt,row:xt};function g(r,e={}){if(!r)return;const{root:t=document.documentElement,returnAll:a,preProcess:n}=e,l=he(r);if(l.length>1){for(let p=0;p<l.length;p+=1){const d=g(l[p],e);if(d!=null&&d.length)return d}return}const[i,s]=r.split("|");if(!s)return;const c=(s!=null&&s.startsWith("[")&&s.endsWith("]")?s.substring(1,s.length-1).split(","):[s]).map(p=>{const d=p.indexOf(":"),h=d!==-1;return{action:h?p.substring(0,d):p,param:h?p.substring(d+1):""}}),o=i?Array.from(t.querySelectorAll(i)):[t];if(!o.length)return a?[]:void 0;n&&n(o);const u=[];for(const p of o)for(const d of c){const h=Ot[d.action],f=h(p,d.param);if(f){if(a){u.push(f);break}return f}}return a?u:void 0}function St(r){return Array.from(r.childNodes).filter(e=>e.nodeType===3).map(e=>z(e.textContent)).filter(Boolean).join(" ").trim()||z(r.textContent)}function Pt(r,e){return z(r.getAttribute(e))}function jt(r,e){let t=r.getAttribute(e);if(!t){const a=r.getAttributeNames().find(n=>n.includes(e));a&&(t=r.getAttribute(a))}return z(t)}function he(r){const e=[],t=r.split("||").map(a=>a.trim()).filter(Boolean);return t.forEach((a,n)=>{if(a.includes("|")){e.push(a);return}const l=t[n+1];l&&(t[n+1]=`${a},${l}`)}),e}function Dt(r){return r.value}function xt(r,e){var t,a,n,l;if(!e)return;const i=(t=z(r.textContent))==null?void 0:t.toLowerCase(),s=e.toLowerCase();if(!(i!==s&&i!==`${s}:`))return z((l=(a=r.nextElementSibling)==null?void 0:a.textContent)!=null?l:(n=r.nextSibling)==null?void 0:n.textContent)}function z(r){if(r)return r?.replace(/(\n|\t)/g," ").trim()||void 0}async function H(r,e,t){const a=await t(()=>{r=0});if(a!==void 0)return a;if(!(r<=0))return await new Promise(n=>{setTimeout(async()=>{const l=await H(r-1,e,t);n(l)},e)})}async function U(r,e,t=0){var a;const n=(a=e.root)!=null?a:document.documentElement;return H(e.lazy===!0?200:0,100,()=>{var l;const i=e.all===!0?Array.from(n.querySelectorAll(r)):(l=n.querySelector(r))!=null?l:void 0;return(e.all?!(i!=null&&i.length):!i)?void 0:i})}const Ct=/(vol(ume)?|season)(\s*|-|\.)(\d+)/i,Tt=/(ch(ap(t(er)?|\.)?|\.)?|^#|episode\.?)(\s*|-)(\d+([_-~,.]\d+)?)/i,Mt=/\d+([_-~,.]\d+)?/,It=/[_-~,]/;function J(r){var e;if(!r||!r)return;if(!isNaN(+r))return{chap:+r};const t=r.match(Ct),a=t!=null&&t[0]?r.replace(t[0],"").trim():r,n=a.match(Tt),l=a.match(Mt),i=(e=n?.[6])!=null?e:l?.[0];if(!i)return;const s=+i.replace(It,".");if(isNaN(s))return;const c=t?.[4];return{vol:c&&!isNaN(+c)?+c:void 0,chap:s}}function F(r){return r.sort((e,t)=>e.vol===void 0||t.vol===void 0?t.chap-e.chap:t.vol-e.vol||t.chap-e.chap),Nt(r)}function Nt(r){let e;for(let t=r.length-1;t>=0;t--){const a=r[t];a.vol!==void 0?e=a.vol:e!==void 0&&(a.inferVol=e)}return r}const Bt=[{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 fe(r){const e=r?.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 l=t.valueOf();if(!isNaN(l))return t.getHours()===0&&t.getMinutes()===0?Math.min(Date.now(),l+432e5):l}const a=Bt.find(l=>l.regex.test(e));if(!a)return;const n=e.split(" ").filter(Boolean);for(let l=0;l<n.length;l++){const i=n[l],s=i==="a"||i==="an"?1:+i;if(!s)continue;if(s<0)return;const c=Date.now()-s*a.seconds*1e3;return c>0?c:void 0}}function ne(r,e=location.origin){if(!r)return;const t=r.startsWith("//")?`${location.protocol}${r}`:r;return t.startsWith(e)?t.replace(e,""):t}function ve(r,e){if(!r)return"/";const t=r.replace("{titleSlug}",e),a=t.endsWith("/")?t:t+"/";return a.startsWith("/")?a:"/"+a}var At=Object.defineProperty,me=Object.getOwnPropertySymbols,Et=Object.prototype.hasOwnProperty,_t=Object.prototype.propertyIsEnumerable,ye=(r,e,t)=>e in r?At(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,Lt=(r,e)=>{for(var t in e||(e={}))Et.call(e,t)&&ye(r,t,e[t]);if(me)for(var t of me(e))_t.call(e,t)&&ye(r,t,e[t]);return r};function we(r,e){var t,a;const n=[...e],l=[];let i=-1,s=-1;for(let o=0;o<r.length&&!(!n.length&&o>=10);o++){const u=Lt({},r[o]),p=n.findIndex(f=>f.slug===u.slug&&f.name===u.name),d=p===-1?void 0:n.splice(p,1)[0],h=!d||((t=d.chapters[0])==null?void 0:t.chap)!==((a=u.chapters[0])==null?void 0:a.chap);p!==-1&&(s=o),h&&(i=o,u.changed=!0),l.push(u)}if(i===-1)return[];if(n.length&&n.length!==e.length){const o=Math.max(10,s+1);l.splice(o);for(let u=s+1;u<l.length;u++)l[u].changed=!1;return l}const c=Math.min(Math.max(i+1,10),Math.max(s+1,100));return l.slice(0,c)}var kt=Object.defineProperty,Wt=Object.defineProperties,qt=Object.getOwnPropertyDescriptors,be=Object.getOwnPropertySymbols,zt=Object.prototype.hasOwnProperty,Ut=Object.prototype.propertyIsEnumerable,Re=(r,e,t)=>e in r?kt(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,Ft=(r,e)=>{for(var t in e||(e={}))zt.call(e,t)&&Re(r,t,e[t]);if(be)for(var t of be(e))Ut.call(e,t)&&Re(r,t,e[t]);return r},Vt=(r,e)=>Wt(r,qt(e));function $e(r,e){const t={};return r.forEach(a=>{Object.values(a.chapters.reduce((n,l)=>{const i=l.lang||e||"default";return n[i]||(n[i]=[]),n[i].push(l),n},{})).forEach(n=>{var l,i;const s=(i=(l=n[0])==null?void 0:l.lang)!=null?i:e,c=`${a.slug}:${s||""}`;t[c]?(t[c].chapters.push(...n),F(t[c].chapters)):t[c]=Vt(Ft({},a),{lang:s})})}),Object.values(t)}var b=(r=>(r.title="title",r.reader="reader",r.releases="releases",r.chapters="chapters",r.search="search",r))(b||{});let Ht=class{constructor(e){this.methodsMap={[b.title]:()=>this.getRawTitleData(),[b.reader]:()=>this.getRawReaderData(),[b.releases]:()=>this.getRawReleasesData(),[b.search]:()=>this.getRawSearchData(),[b.chapters]:()=>this.getRawChaptersData()},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 a=await this.methodsMap[e]();if(t&&!a)return;const n=location.origin+location.pathname;return{type:e,is404:Gt(this.spec),specId:this.spec.id,siteName:g(this.spec.name),url:n,data:a}}resolveReaderSlug(e,t){return t.startsWith(e)?t.replace(e,""):t}resolveTitleSlug(e){var t;if(typeof e!="string")return;const a=(t=j(e))==null?void 0:t.split("/").filter(Boolean);return!a||!a.length?e:a[a.length-1]}finalizeRawReleasesData(e){var t,a,n;const l=(a=(t=this.spec.releases)==null?void 0:t.title)!=null&&a.lang?this.siteMeta.defaultLang:void 0,i=$e(e.rawReleases,l);if(i.length)return{rawReleases:(n=this.context)!=null&&n.oldRawReleases?we(i,this.context.oldRawReleases):i}}getTagIdsFromNames(e){var t;if(!(e!=null&&e.length))return;const a=(t=this.normalizedTagsMap)!=null?t:this.normalizedTagsMap=Jt(this.tags),n=e.map(l=>a[le(l)]).filter(Boolean);return n.length===0?void 0:Array.from(new Set(n)).sort((l,i)=>l-i)}};function Jt(r){const e={};return r.forEach(({id:t,name:a,altNames:n})=>{e[le(a)]=t,n&&n.forEach(l=>{e[le(l)]=t})}),e}function le(r){const e=r.toLowerCase().replaceAll(" ","").replaceAll("-","");return e[e.length-1]==="s"?e.substring(0,e.length-1):e}function Gt(r){return r[404]&&document.querySelector(r[404])?!0:document.title.toLowerCase().includes("not found")}var Qt=Object.defineProperty,Yt=Object.defineProperties,Kt=Object.getOwnPropertyDescriptors,Y=Object.getOwnPropertySymbols,Oe=Object.prototype.hasOwnProperty,Se=Object.prototype.propertyIsEnumerable,Pe=(r,e,t)=>e in r?Qt(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,B=(r,e)=>{for(var t in e||(e={}))Oe.call(e,t)&&Pe(r,t,e[t]);if(Y)for(var t of Y(e))Se.call(e,t)&&Pe(r,t,e[t]);return r},E=(r,e)=>Yt(r,Kt(e)),je=(r,e)=>{var t={};for(var a in r)Oe.call(r,a)&&e.indexOf(a)<0&&(t[a]=r[a]);if(r!=null&&Y)for(var a of Y(r))e.indexOf(a)<0&&Se.call(r,a)&&(t[a]=r[a]);return t};class x extends Ht{async getRawReleasesData(){var e,t;if(!((t=(e=this.spec)==null?void 0:e.releases)!=null&&t.title))return;const a=this.spec.releases.title,{chapter:n}=a,l=je(a,["chapter"]),i=await U(l.sel,{lazy:!0,all:!0});if(!(i!=null&&i.length))return;const s=i.slice(0,100).map(o=>{const u=g(l.url,{root:o}),p=j(u),d=g(l.name,{root:o}),h=g(l.at,{root:o});if(!(!p||!d))return{titleEl:o,id:g(l.id,{root:o}),path:p,img:ne(g(l.img,{root:o})),name:d,lang:g(l.lang,{root:o}),at:h?fe(h):void 0}}).filter(Boolean);if(!s.length)return;const c=await Promise.all(s.map(async o=>{var u;const p=o,{path:d,titleEl:h,lang:f,at:v}=p,y=je(p,["path","titleEl","lang","at"]),S=this.resolveTitleSlug(d),R=(u=await this.getChapters(n,{root:h,titleSlug:S}))!=null?u:[];return B({slug:S,chapters:f||v?R.map(m=>{var P,w;return E(B({},m),{lang:(P=m.lang)!=null?P:f,ts:(w=m.ts)!=null?w:v})}):R},y)}));return this.finalizeRawReleasesData({rawReleases:c})}async getRawTitleData(){var e,t;const a=this.spec.title;if(!a||a.sel&&!await U(a.sel,{lazy:!!a.lazy}))return;const n=g(a.name);if(!n)return;const l=this.resolveTitleSlug(location.pathname);if(!l)return;let i=(e=g(a.tags,{returnAll:!0}))!=null?e:[];i.length===1&&(i=i[0].split(",").map(o=>o.trim()).filter(Boolean));const s=g(a.type),c=g(a.langs,{returnAll:!0});return{id:g(a.id),url:location.origin+location.pathname,slug:l,name:n,langs:c!=null&&c.length?c:a.langs&&this.siteMeta.defaultLang?[this.siteMeta.defaultLang]:void 0,tags:this.getTagIdsFromNames([...i??[],...s?[s]:[]]),chapters:(t=await this.getChapters(a.chapter,{lazy:!0,titleSlug:l}))!=null?t:[],img:ne(g(a.img))}}async getRawReaderData(){var e,t,a,n,l;const{spec:i,siteMeta:s}=this;if(!(i!=null&&i.reader)||i.generic&&!await x.isReaderPage(i.reader))return;const c=i.reader.title,o=document.querySelector(c.sel);if(!o)return;const u=g(c.name,{root:o}),p=g(c.url,{root:o}),d=this.resolveTitleSlug(p),h=g(c.img,{root:o});if(!u||!p||!d)return;const f=(t=await this.getChapters((e=i.reader)==null?void 0:e.chapter,{titleSlug:d}))!=null?t:[],v=(a=g(i.reader.label))==null?void 0:a.toLowerCase().replace(u.toLowerCase(),"");if(!v)return;const{vol:y,chap:S=0}=J(v)||{};let R;const m=(n=g(i.reader.img,{returnAll:!0,preProcess(O){const M=O.map(T=>+(T.getAttribute("height")||0)/+(T.getAttribute("width")||1));M.some(T=>T>2.5)?R=!0:M.filter(Boolean).length>Math.max(1,M.length-2)&&(R=!1)}}))!=null?n:[];if(!m.length)return;const P=ve(s.readerBase,d),w=s.readerBase.split("/").indexOf("{lang}"),$=w!==-1?location.pathname.substring(1).split("/")[w]:void 0,D=$?P.replace("{lang}",$):P,C=(l=$??g(i.reader.lang))!=null?l:i.reader.lang?this.siteMeta.defaultLang:void 0;return this.finalizeRawReaderData({isWebtoon:R,vol:y,chap:S,lang:C,slug:this.resolveReaderSlug(D,location.pathname),basePath:D,imgs:m,imgsLocator:i.reader.img,title:{id:g(c.id),url:p,slug:d,name:u,langs:C?[C]:void 0,img:h,chapters:f}},{prevSlug:this.findNeighborChapter({sel:i.reader.prev,basePath:D}),nextSlug:this.findNeighborChapter({sel:i.reader.next,basePath:D})})}async getRawChaptersData(){var e;const t=await this.getRawTitleData();if(!t)return;const a=(e=this.context)==null?void 0:e.lang,{chapters:n}=t;return{chapters:a?n.filter(l=>!l.lang||l.lang===a):n,title:E(B({},t),{chapters:[]}),hasMore:!1,asc:!1,total:n.length}}async getRawSearchData(){var e;const t=(e=this.spec.search)==null?void 0:e.title;if(!t)return;const{chapter:a}=t,n=[];return await Promise.all(Array.from(document.querySelectorAll(t.sel)).map(async l=>{var i;const s=g(t.url,{root:l}),c=j(s),o=g(t.name,{root:l}),u=this.resolveTitleSlug(c);!c||!o||!u||n.push({slug:u,name:o,chapters:(i=await this.getChapters(a,{root:l,titleSlug:u}))!=null?i:[]})})),n.length?{rawReleases:n}:void 0}async getChapters(e,{root:t=document.documentElement,titleSlug:a="",lazy:n=!0}){var l;if(!e)return;const i=[],s=await U(e.sel,{root:t,all:!0,lazy:n});if(!(s!=null&&s.length))return i;const c=(s??[]).map(v=>({id:g(e.id,{root:v}),label:g(e.label,{root:v}),url:g(e.url,{root:v}),at:g(e.at,{root:v})})),o=c.map(({label:v})=>J(v)),u=(l=o[1])==null?void 0:l.chap;!o[0]&&(u===void 0||u<=1)&&(o[0]={chap:0});const{readerBase:p}=this.siteMeta,d=ve(p,a),h=p.split("/").indexOf("{lang}"),f=h!==-1;return o.forEach((v,y)=>{var S;if(!v)return;const{id:R,url:m,at:P}=c[y],w=m?.startsWith("http")&&!m.startsWith(location.origin),$=w?m:j(m);if(!$)return;const D=!w&&f?$?.substring(1).split("/")[h]:void 0,C=w?$:this.resolveReaderSlug(D?d.replace("{lang}",D):d,$);i.push(E(B({},v),{id:R,slug:C,lang:D,ts:fe(P)||((S=i[i.length+1])==null?void 0:S.ts)||Date.now()}))}),F(i)}static async isReaderPage(e){const{sel:t,img:a}=e;if(!t||!a||!await U(t,{lazy:!!e.lazy}))return!1;const n=he(a).map(l=>l.split("|")[0]).join(",");return!!await U(n,{lazy:!0})}findNeighborChapter({sel:e,basePath:t}){const a=g(e);if(!a||a.startsWith("#")||a.startsWith("/#"))return;const n=j(a);return n?this.resolveReaderSlug(t,n):void 0}finalizeRawReaderData(e,{prevSlug:t,nextSlug:a}={}){var n;const l=(n=e.title)==null?void 0:n.chapters;if(!(l!=null&&l.length)){const u=J(t),p=J(a);return!u&&!p?e:E(B({},e),{prev:u?E(B({},u),{slug:t}):void 0,next:p?E(B({},p),{slug:a}):void 0})}let i,s,c,o;for(let u=0;u<l.length&&!(i&&(!t||c)&&!a&&o);u++){const p=l[u];!i&&(e.slug==p.slug||e.chap===p.chap&&(e.vol===p.vol||e.vol===void 0))?(i=p,s=u):!c&&t===p.slug?c=p:!o&&a===p.slug&&(o=p)}return s!==void 0&&(c!=null||(c=l[s+1]),o!=null||(o=l[s-1])),E(B({},e),{inferVol:i?.inferVol,prev:c,next:o})}}class De extends x{resolveTitleSlug(e){var t;return(t=j(e))==null?void 0:t.split("/").filter(Boolean)[1]}}De.specId="bato";function Xt(){return Math.random().toString(16).slice(2)}async function Zt({addListener:r,removeListener:e,transform:t,filter:a,handler:n,onTimeout:l,timeout:i,once:s}){return new Promise(c=>{r(p);const o=()=>s===!0&&e(p),u=i?setTimeout(()=>{o(),c(void 0),l?.()},i):void 0;async function p(d,...h){d=t?t(d):d,d!==void 0&&(!a||a(d,...h))&&(o(),c(d),n?.(d,...h),u&&clearTimeout(u))}})}var er=Object.defineProperty,xe=Object.getOwnPropertySymbols,tr=Object.prototype.hasOwnProperty,rr=Object.prototype.propertyIsEnumerable,Ce=(r,e,t)=>e in r?er(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,ar=(r,e)=>{for(var t in e||(e={}))tr.call(e,t)&&Ce(r,t,e[t]);if(xe)for(var t of xe(e))rr.call(e,t)&&Ce(r,t,e[t]);return r};async function nr(r){const e=await Zt(ar({addListener:t=>window.addEventListener("message",t),removeListener:t=>window.removeEventListener("message",t)},r));return e?.data}async function lr(r){var e;const{receiverWindow:t,timeout:a,targetOrigin:n,event:l,args:i}=r,s={reqId:Xt(),event:l,args:i};(e=t||window)==null||e.postMessage(s,n??"*");const c=await nr({filter:o=>{var u;return((u=o?.data)==null?void 0:u.resId)===s.reqId},timeout:a??3e4,once:!0});return c?.result}const I={isAny:!0};function A(r,...e){return lr({event:"tk:fetchResult",args:{baseUrl:r,segments:e}})}function ir(r){if(r)try{return JSON.parse(r)}catch{return}}var sr=Object.defineProperty,or=Object.defineProperties,cr=Object.getOwnPropertyDescriptors,Te=Object.getOwnPropertySymbols,ur=Object.prototype.hasOwnProperty,pr=Object.prototype.propertyIsEnumerable,Me=(r,e,t)=>e in r?sr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,K=(r,e)=>{for(var t in e||(e={}))ur.call(e,t)&&Me(r,t,e[t]);if(Te)for(var t of Te(e))pr.call(e,t)&&Me(r,t,e[t]);return r},X=(r,e)=>or(r,cr(e));class Ie extends x{async getRawReleasesData(){let e=[];try{e=await(await fetch("https://api.comick.app/chapter?page=1&device-memory=8&order=hot&accept_erotic_content=true")).json()}catch{return}const t=[];return e.forEach(a=>{const{vol:n,chap:l,hid:i,lang:s,updated_at:c,md_comics:o}=a,u=typeof l=="string"&&!isNaN(+l)?+l:void 0;typeof u=="number"&&t.push({id:o.id+"",slug:o.slug,name:o.title,chapters:[{slug:i,vol:typeof n=="string"&&!isNaN(+n)?+n:void 0,chap:u,lang:s,ts:new Date(c).valueOf()}]})}),super.finalizeRawReleasesData({rawReleases:t})}async getRawTitleData(){var e,t,a,n,l,i,s,c;const o=await super.getRawTitleData();if(!o)return o;const u=await A("https://api.comick.app/","comic",I,"chapters");if(!u)return o;const p=await dr(o.slug),d=Ne(u),h=g("h1 ~ div.text-sm span:first-child|row:demographic"),f=h?(e=this.getTagIdsFromNames([h]))==null?void 0:e[0]:void 0;return f&&!((t=o.tags)!=null&&t.includes(f))&&((a=o.tags)==null||a.push(f),(n=o.tags)==null||n.sort((v,y)=>v-y)),X(K({},o),{img:(i=o.img)!=null?i:ne(g((l=this.spec.title)==null?void 0:l.img)),id:p,hasMoreChapters:(s=d?.hasMore)!=null?s:!1,chapters:(c=d?.chapters)!=null?c:[]})}async getRawReaderData(){var e,t,a,n,l,i,s;const c=await super.getRawReaderData();if(!c)return c;const o=await A("/_next/data/",I,"comic",I),u=(e=o?.comic)==null?void 0:e.id,p=(n=(a=(t=o?.comic)==null?void 0:t.md_comic_md_genres)==null?void 0:a.map)==null?void 0:n.call(a,h=>{var f;return(f=h?.md_genre)==null?void 0:f.name}),d=(s=(i=(l=o?.comic)==null?void 0:l.md_covers)==null?void 0:i[0])==null?void 0:s.b2key;return X(K({},c),{title:X(K({},c.title),{id:u?u+"":void 0,tags:this.getTagIdsFromNames(p),img:typeof d=="string"?`https://meo.comick.pictures/${d}`:void 0})})}async getRawChaptersData(){var e;if(!((e=this.context)!=null&&e.rawId))return;const{rawId:t,lang:a="en",skip:n}=this.context,l=n?Math.floor(n/1e3)+1:void 0;try{const i=await fetch(`https://api.comick.app/comic/${t}/chapters?lang=${a}&limit=1000${l&&l>1?`&page=${l}`:""}`),s=Ne(await i.json());return s?X(K({},s),{lang:a,asc:!1}):void 0}catch{return}}}Ie.specId="comick";function Ne(r){var e;if(!Array.isArray(r?.chapters))return;const t=[];return r.chapters.forEach(a=>{const{vol:n,chap:l,hid:i,lang:s,updated_at:c}=a,o=typeof l=="string"&&!isNaN(+l)?+l:void 0;typeof o!="number"||t.some(u=>u.vol==n&&u.chap===o&&u.lang===s)||t.push({slug:i,vol:typeof n=="string"&&!isNaN(+n)?+n:void 0,chap:o,lang:s,ts:new Date(c).valueOf()})}),{chapters:F(t),total:(e=r.total)!=null?e:t.length,hasMore:r.total>r.limit}}async function dr(r){var e,t,a,n,l,i,s;const c=(e=document.querySelector("script#__NEXT_DATA__"))==null?void 0:e.textContent,o=c?ir(c):void 0;if(((t=o?.query)==null?void 0:t.slug)===r){const d=(l=(n=(a=o?.props)==null?void 0:a.pageProps)==null?void 0:n.comic)==null?void 0:l.id;return d?d+"":void 0}const u=await A("/_next/data/",I,"comic",r,"covers.json"),p=(s=(i=u?.pageProps)==null?void 0:i.comic)==null?void 0:s.id;return p?p+"":void 0}var gr=Object.defineProperty,hr=Object.defineProperties,fr=Object.getOwnPropertyDescriptors,Be=Object.getOwnPropertySymbols,vr=Object.prototype.hasOwnProperty,mr=Object.prototype.propertyIsEnumerable,Ae=(r,e,t)=>e in r?gr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,ie=(r,e)=>{for(var t in e||(e={}))vr.call(e,t)&&Ae(r,t,e[t]);if(Be)for(var t of Be(e))mr.call(e,t)&&Ae(r,t,e[t]);return r},se=(r,e)=>hr(r,fr(e));class Ee extends x{resolveReaderSlug(e,t){return super.resolveReaderSlug(e,t).replace(/-page-\d{1,3}\.html$/,".html")}async getRawTitleData(){const e=await super.getRawTitleData();return e&&se(ie({},e),{chapters:_e(await this.getVM(),e.slug),hasMoreChapters:!1})}async getRawReaderData(){const e=await super.getRawReaderData();if(!e)return e;const t=await this.getVM();return console.log("vm",t),this.finalizeRawReaderData(se(ie({},e),{imgs:yr(t,e.imgs[0]),title:se(ie({},e.title),{chapters:_e(t,e.title.slug),hasMoreChapters:!1})}))}getVM(){return H(40,50,()=>{var e,t,a,n;return(n=(a=(t=(e=window.angular)==null?void 0:e.element)==null?void 0:t.call(e,document.documentElement))==null?void 0:a.scope())==null?void 0:n.vm})}}Ee.specId="manga4life";function _e(r,e){var t,a;return((a=(t=r?.Chapters)!=null?t:r?.CHAPTERS)!=null?a:[]).sort((n,l)=>l.Chapter-n.Chapter).map(n=>{const l=+n.Chapter.substring(1)/10;return{slug:`${e}-chapter-${l}.html`,chap:l,ts:new Date(n.Date).valueOf()}})}function yr(r,e){let t=e.split(".").slice(-1)[0];t=t.length>=3&&t.length<=4?t:"png";try{const a=r.CurChapter.Chapter.slice(1,-1),n=r.CurChapter.Chapter[r.CurChapter.Chapter.length-1],l=n!=="0"?`${a}.${n}`:a,i=`https://${r.CurPathName}/manga/${r.IndexName}/${r.CurChapter.Directory?`${r.CurChapter.Directory}/`:""}${l}-`;return r.Pages.map(s=>{const c=(s+"").padStart(3,"0");return`${i}${c}.${t}`})}catch{return[]}}class wr{constructor(e){this.methodsMap={[b.title]:()=>this.getRawTitleData(),[b.reader]:()=>this.getRawReaderData(),[b.releases]:()=>this.getRawReleasesData(),[b.search]:()=>this.getRawSearchData(),[b.chapters]:()=>this.getRawChaptersData()},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 a=await this.methodsMap[e]();if(t&&!a)return;const n=location.origin+location.pathname;return{type:e,is404:Rr(this.spec),specId:this.spec.id,siteName:g(this.spec.name),url:n,data:a}}resolveReaderSlug(e,t){return t.startsWith(e)?t.replace(e,""):t}resolveTitleSlug(e){var t;if(typeof e!="string")return;const a=(t=j(e))==null?void 0:t.split("/").filter(Boolean);return!a||!a.length?e:a[a.length-1]}finalizeRawReleasesData(e){var t,a,n;const l=(a=(t=this.spec.releases)==null?void 0:t.title)!=null&&a.lang?this.siteMeta.defaultLang:void 0,i=$e(e.rawReleases,l);if(i.length)return{rawReleases:(n=this.context)!=null&&n.oldRawReleases?we(i,this.context.oldRawReleases):i}}getTagIdsFromNames(e){var t;if(!(e!=null&&e.length))return;const a=(t=this.normalizedTagsMap)!=null?t:this.normalizedTagsMap=br(this.tags),n=e.map(l=>a[oe(l)]).filter(Boolean);return n.length===0?void 0:Array.from(new Set(n)).sort((l,i)=>l-i)}}function br(r){const e={};return r.forEach(({id:t,name:a,altNames:n})=>{e[oe(a)]=t,n&&n.forEach(l=>{e[oe(l)]=t})}),e}function oe(r){const e=r.toLowerCase().replaceAll(" ","").replaceAll("-","");return e[e.length-1]==="s"?e.substring(0,e.length-1):e}function Rr(r){return r[404]&&document.querySelector(r[404])?!0:document.title.toLowerCase().includes("not found")}var $r=Object.defineProperty,Or=Object.defineProperties,Sr=Object.getOwnPropertyDescriptors,Le=Object.getOwnPropertySymbols,Pr=Object.prototype.hasOwnProperty,jr=Object.prototype.propertyIsEnumerable,ke=(r,e,t)=>e in r?$r(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,We=(r,e)=>{for(var t in e||(e={}))Pr.call(e,t)&&ke(r,t,e[t]);if(Le)for(var t of Le(e))jr.call(e,t)&&ke(r,t,e[t]);return r},qe=(r,e)=>Or(r,Sr(e));class ze extends wr{resolveTitleSlug(e){var t;return(t=j(e))==null?void 0:t.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:a,attributes:n,id:l})=>{const i=a.find(({type:o})=>o==="manga"),s=typeof n.volume=="string"?+n.volume:void 0,c=typeof n.chapter=="string"?+n.chapter:void 0;c&&t.push({slug:i.id,name:Object.values(i.attributes.title)[0],chapters:[{slug:n.externalUrl||l,vol:s,chap:c,lang:n.translatedLanguage,ts:new Date(n.readableAt).valueOf()}]})}),super.finalizeRawReleasesData({rawReleases:t})}async getRawTitleData(){var e,t,a;const n="https://api.mangadex.org/manga/",[l,i]=await Promise.all([A(n,I),A(n,I,"feed")]);if(!l||!i)return;const s=(a=(t=(e=i.data)==null?void 0:e.map)==null?void 0:t.call(e,u=>{const{attributes:p,id:d}=u;if(typeof p!="object"||typeof d!="string"||!d)return;const{externalUrl:h,title:f,volume:v,chapter:y,translatedLanguage:S}=p;return{slug:h||d,label:f||void 0,vol:typeof v=="string"?+v:void 0,chap:typeof y=="string"?+y:void 0,lang:S||"en",ts:new Date(p.readableAt).valueOf()}}).filter(u=>u?.chap!=null))!=null?a:[],{data:c}=l;if(!c)return;const o=Fe({data:c,getTagIdsFromNames:u=>this.getTagIdsFromNames(u)});if(o)return qe(We({},o),{chapters:F(s),hasMoreChapters:(i.total||0)>(i.limit||0)})}async getRawReaderData(){var e,t,a,n,l,i,s,c,o,u,p,d,h,f;const v="https://api.mangadex.org/",[y,S,R]=await Promise.all([A(v,"chapter",I),A(v,"at-home","server",I),A(v,"manga",I,"aggregate")]);if(!y||!S||!R)return;const m=y.data,{volume:P,chapter:w,externalUrl:$,translatedLanguage:D}=m.attributes||{},{baseUrl:C,chapter:{data:O,dataSaver:M,hash:T}}=S,bt=(t=(e=m.relationships)==null?void 0:e.find)==null?void 0:t.call(e,N=>N.type==="manga");if(!bt)return;const Rt=Fe({data:bt,getTagIdsFromNames:N=>this.getTagIdsFromNames(N)});if(!Rt||typeof R.volumes!="object")return;const k=(a=Ue(R))!=null?a:[];(typeof w!="string"||w==="none")&&!k.length&&k.push({chap:0,slug:m.id});const de=k.findIndex(N=>N.slug===m.id),ae=(l=(n=m.relationships)==null?void 0:n.find)==null?void 0:l.call(n,N=>N.type==="scanlation_group"),va=C.endsWith("/")?C:C+"/",$t=!!((s=(i=localStorage.getItem("md"))==null?void 0:i.includes)!=null&&s.call(i,'"dataSaver":true')),ma=`${va}${$t?"data-saver":"data"}/`,ya=(p=(u=(o=(c=$t?M:O)!=null?c:[]).map)==null?void 0:u.call(o,N=>`${ma}${T}/${N}`))!=null?p:[];return{externalUrl:$,vol:typeof P=="string"?+P:void 0,inferVol:(d=k[de])==null?void 0:d.inferVol,chap:+w||0,imgs:ya,lang:D,slug:m.id,prev:k[de+1],next:k[de-1],basePath:"/chapter/",groupName:(h=ae?.attributes)==null?void 0:h.name,groupUrl:(f=ae?.attributes)==null?void 0:f.website,title:qe(We({},Rt),{chapters:k})}}async getRawChaptersData(){if(!this.context)return;const{titleSlug:e,lang:t="en"}=this.context;let a;try{const n=await fetch(`https://api.mangadex.org/manga/${e}/aggregate?translatedLanguage[]=${t}`);a=Ue(await n.json())}catch{return}if(a)return{chapters:a,lang:t,asc:!1,hasMore:!1,total:a.length}}}ze.specId="mangadex";function Ue(r){if(typeof r.volumes!="object")return;const e=Object.values(r.volumes).map(({volume:t,chapters:a})=>{const n=t==="none"||typeof t!="string"?void 0:+t;return Object.values(a).map(({id:l,chapter:i})=>typeof i!="string"||i==="none"?void 0:{vol:n,chap:+i,slug:l})}).flat().filter(Boolean).reverse();return F(e)}function Fe({data:r,getTagIdsFromNames:e}){var t,a,n,l,i,s;const{id:c,attributes:o,relationships:u}=r;if(!c||typeof c!="string"||typeof o!="object")return;const{title:p,availableTranslatedLanguages:d,altTitles:h,tags:f,contentRating:v}=o;if(typeof p!="object"||d&&!Array.isArray(d))return;const y=Object.values(p)[0];if(!y||typeof y!="string")return;const S=Dr(),R=(n=(a=(t=d??[])==null?void 0:t.map)==null?void 0:a.call(t,O=>typeof O=="string"?O:void 0).filter(Boolean))!=null?n:[],m=R.filter(O=>O&&(!S||S.includes(O))),P=(l=h?.map)==null?void 0:l.call(h,O=>{const[[M,T]=[]]=Object.entries(O);return{lang:M,name:T}}),w=(i=u?.find)==null?void 0:i.call(u,O=>O.type==="cover_art"),$=(s=w?.attributes)==null?void 0:s.fileName,D=$?`https://mangadex.org/covers/${c}/${$}`:void 0,C=(f||[]).map(O=>{var M,T;return(T=(M=O?.attributes)==null?void 0:M.name)==null?void 0:T.en}).concat(v).filter(Boolean);return{url:`${location.origin}/title/${c}`,slug:c,name:y,altNames:P,langs:m.length>0?m:R.length>0?R:["en"],img:D,tags:e(C),isWebtoon:f?.some(O=>O.attributes.name.en==="Long Strip")}}function Dr(){var r;const e=localStorage.getItem("md");if(e)try{const t=JSON.parse(e),a=(r=t?.userPreferences)==null?void 0:r.filteredLanguages;return a!=null&&a.length?a:void 0}catch{return}}var xr=Object.defineProperty,Cr=Object.defineProperties,Tr=Object.getOwnPropertyDescriptors,Ve=Object.getOwnPropertySymbols,Mr=Object.prototype.hasOwnProperty,Ir=Object.prototype.propertyIsEnumerable,He=(r,e,t)=>e in r?xr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,Nr=(r,e)=>{for(var t in e||(e={}))Mr.call(e,t)&&He(r,t,e[t]);if(Ve)for(var t of Ve(e))Ir.call(e,t)&&He(r,t,e[t]);return r},Br=(r,e)=>Cr(r,Tr(e));class Je extends x{async getRawReaderData(){const e=await super.getRawReaderData();return e&&Br(Nr({},e),{imgs:await this.getImgs()})}resolveReaderSlug(e,t){const a=super.resolveReaderSlug(e,t),n=a.split("/").filter(Boolean);return n[n.length-1].startsWith("pg-")?n.slice(0,-1).join("/"):a}async getImgs(){const e=await H(100,20,()=>window.imgsrcs),t=window.CryptoJS,a=t.enc.Hex.parse("e11adc3949ba59abbe56e057f20f883e"),n={iv:t.enc.Hex.parse("1234567890abcdef1234567890abcdef"),padding:t.pad.ZeroPadding};return t.AES.decrypt(e,a,n).toString(t.enc.Utf8).split(",")}}Je.specId="mangago";var Ar=(r=>(r[r.reading=1]="reading",r[r.paused=2]="paused",r[r.plan=3]="plan",r[r.completed=4]="completed",r[r.dropped=5]="dropped",r[r.deleted=6]="deleted",r))(Ar||{}),ce=(r=>(r.id="id",r.name="name",r.slug="slug",r))(ce||{}),Er=(r=>(r.blank="about:blank",r.title="meta.title",r.reader="meta.reader",r))(Er||{}),_r=(r=>(r[r.string=1]="string",r[r.number=2]="number",r[r.bool=3]="bool",r[r.selection=4]="selection",r))(_r||{}),Lr=(r=>(r[r.pending=0]="pending",r[r.completed=1]="completed",r[r.offline=2]="offline",r[r.incompat=3]="incompat",r))(Lr||{}),kr=(r=>(r[r.releases=1]="releases",r[r.img=2]="img",r))(kr||{});function Ge(r,e){const t=r[0]===e?r.substring(1):r;return t[t.length-1]===e?t.substring(0,t.length-1):t}var Wr=Object.defineProperty,qr=Object.defineProperties,zr=Object.getOwnPropertyDescriptors,Qe=Object.getOwnPropertySymbols,Ur=Object.prototype.hasOwnProperty,Fr=Object.prototype.propertyIsEnumerable,Ye=(r,e,t)=>e in r?Wr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,_=(r,e)=>{for(var t in e||(e={}))Ur.call(e,t)&&Ye(r,t,e[t]);if(Qe)for(var t of Qe(e))Fr.call(e,t)&&Ye(r,t,e[t]);return r},V=(r,e)=>qr(r,zr(e));class Ke extends x{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return V(_({},e),{siteMeta:Vr(this.spec.releases,this.siteMeta)})}async getRawTitleData(){var e;const t=await super.getRawTitleData();if(!t)return;const a=L(location.pathname);let n;if((e=t.chapters)!=null&&e.length){const l=this.spec.title.chapter,i=document.querySelector(l.sel),s=j(g(l.url,{root:i}));s&&(n=L(s))}return V(_({},t),{siteMeta:Z(this.siteMeta,{titleBase:a,readerBase:n})})}async getRawReaderData(){const e=await super.getRawReaderData();if(e)return V(_({},e),{siteMeta:Z(this.siteMeta,{titleBase:L(j(e.title.url)),readerBase:L(location.pathname),idBase:Xe()}),title:V(_({},e.title),{id:await this.getReaderTitleId()})})}async getRawSearchData(){const e=await super.getRawSearchData();if(!e)return;const t=this.spec.search.title,a=document.querySelector(t.sel),n=g(t.url,{root:a});return V(_({},e),{siteMeta:Z(this.siteMeta,{titleBase:L(j(n)),idBase:Xe()})})}async getReaderTitleId(){var e,t;const a=await((t=(e=window.HISTORY)==null?void 0:e.getStored)==null?void 0:t.call(e));if(!a||typeof a!="object")return;const n=Object.values(a).filter(Boolean);if(n.length)return n.sort((l,i)=>i.time-l.time),n[0].manga_ID}}Ke.specId="mangastream";function Vr(r,e){var t,a;if(!r)return;const n=V(_({},e),{releases:Ge(location.pathname,"/")}),l=r.title,i=(t=document.querySelector(l.sel))!=null?t:void 0;if(!i)return;const s=j(g(l.url,{root:i}));if(s===void 0)return;const c=(a=i.querySelector(l.chapter.sel))!=null?a:void 0;if(!c)return;const o=j(g(l.chapter.url,{root:c}));if(o!==void 0)return n.titleBase=L(s),n.readerBase=L(o),e.titleIdType===ce.id&&(g(l.id,{root:i})||(e.titleIdType=ce.name)),Z(e,n)}function Xe(){return document.querySelector('link[rel="shortlink"][href*="/?p="]')?"?p=":void 0}function Z(r,e){const t=Object.keys(e),a=_({},r);let n=!1;return t.forEach(l=>{const i=e[l];i!==r[l]&&(a[l]=i,n=!0)}),n?a:void 0}function L(r){return Ge(r,"/").split("/").slice(0,-1).join("/")}var Hr=Object.defineProperty,Jr=Object.defineProperties,Gr=Object.getOwnPropertyDescriptors,Ze=Object.getOwnPropertySymbols,Qr=Object.prototype.hasOwnProperty,Yr=Object.prototype.propertyIsEnumerable,et=(r,e,t)=>e in r?Hr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,ue=(r,e)=>{for(var t in e||(e={}))Qr.call(e,t)&&et(r,t,e[t]);if(Ze)for(var t of Ze(e))Yr.call(e,t)&&et(r,t,e[t]);return r},tt=(r,e)=>Jr(r,Gr(e));class rt extends x{async getRawReaderData(){const e=await super.getRawReaderData();if(!e)return e;let t=e.title.id;if(!t){const a=this.spec.reader.title;a.id&&await U(a.id.split("|")[0],{lazy:!0}),t=g(a.id)}return tt(ue({},e),{title:tt(ue({},e.title),{id:t,chapters:await Kr(t),hasMoreChapters:!1})})}resolveTitleSlug(e){const t=super.resolveTitleSlug(e);if(!t)return;const a=t.lastIndexOf("-"),n=+t.substring(a+1);return a===-1||isNaN(n)||n<1e3?t:t.substring(0,a)}}rt.specId="nettruyen";async function Kr(r){var e;if(!r)return[];const t=await fetch(`/Comic/Services/ComicService.asmx/ProcessChapterList?comicId=${r}`).then(a=>a.status===200?a.json():void 0).catch(()=>[]);return(e=t?.chapters)!=null&&e.length?F(t.chapters.map(a=>{const{name:n,url:l}=a,i=J(n);if(!(!i||!l))return ue({slug:j(l).split("/").filter(Boolean).slice(2).join("/")},i)})):[]}var Xr=Object.defineProperty,Zr=Object.defineProperties,ea=Object.getOwnPropertyDescriptors,ee=Object.getOwnPropertySymbols,at=Object.prototype.hasOwnProperty,nt=Object.prototype.propertyIsEnumerable,lt=(r,e,t)=>e in r?Xr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,G=(r,e)=>{for(var t in e||(e={}))at.call(e,t)&&lt(r,t,e[t]);if(ee)for(var t of ee(e))nt.call(e,t)&&lt(r,t,e[t]);return r},Q=(r,e)=>Zr(r,ea(e)),it=(r,e)=>{var t={};for(var a in r)at.call(r,a)&&e.indexOf(a)<0&&(t[a]=r[a]);if(r!=null&&ee)for(var a of ee(r))e.indexOf(a)<0&&nt.call(r,a)&&(t[a]=r[a]);return t};class st extends x{async getRawTitleData(){const e=await super.getRawTitleData();return e&&Q(G({},e),{hasMoreChapters:!!pe()})}async getRawChaptersData(){var e,t;const a=await this.getRawTitleData();if(!(a!=null&&a.hasMoreChapters))return a;const n=(e=this.context)==null?void 0:e.findContinue;if(n){const d=await this.findContinueChapters({rawTitleData:a,chapter:n});return d?{chapters:d,title:Q(G({},a),{chapters:[]})}:void 0}const l=(t=this.context)==null?void 0:t.skip,i=a,{chapters:s}=i,c=it(i,["chapters"]),o=s.length,u=l&&l>=o?Math.floor(l/o)+1:void 0;if(!u)return{chapters:s,title:Q(G({},c),{chapters:[]}),hasMore:!!pe()};const p=await this.getChaptersByPage({page:u,titleSlug:a.slug});return{chapters:p??[],title:Q(G({},c),{chapters:[]}),hasMore:!!pe(u),asc:!1,skip:l}}async findContinueChapters(e){var t=e,{rawTitleData:a,chapter:{chap:n},curPage:l=1,cacheChaptersByPage:i={}}=t,s=it(t,["rawTitleData","chapter","curPage","cacheChaptersByPage"]),c,o;const u=(c=i[l])!=null?c:a.chapters,p=u[u.length-1].chap<=n,d=(o=s.maxPage)!=null?o:ta();if(p){if(u[0].chap>n){const w=[...u].reverse().find($=>$.chap>n);return w?[w]:u.slice(0,1)}if(l<=1)return u.slice(0,1)}else if(l===d)return u.slice(-1);const h=a.chapters.length,f=Object.keys(i).map(w=>+w).sort((w,$)=>w-$),v=p?-1:1,y=f[f.indexOf(l)+v];if(y===l+v)return p?i[y].slice(-1).concat(u.slice(0,1)):u.slice(-1).concat(i[y].slice(0,1));const S=p?n-u[0].chap:u[0].chap-n,R=Math.floor(S/h)+1,m=p?Math.max(R,(y??1)+1):Math.min(R,(y??d+1)-1,d),P=await this.getChaptersByPage({page:m,titleSlug:a.slug});if(P)return await this.findContinueChapters({rawTitleData:a,chapter:{chap:n},curPage:m,maxPage:d,cacheChaptersByPage:Q(G({},i),{1:a.chapters,[m]:P})})}async getChaptersByPage({page:e,titleSlug:t}){const a=ot(e);if(!a)return;const n=this.spec.title.chapter,l=n.sel,i=document.querySelector(l),s=H(100,30,()=>{const c=document.querySelector(l);if(c&&i!==c)return!0;a.click()});return a.click(),await s,await this.getChapters(n,{lazy:!1,titleSlug:t})}}st.specId="reaper";function pe(r=1){return ot(r+1)}function ot(r){const e=`span[wire\\:key="paginator-page-1-page${r}"] button,button[aria-label="Go to page ${r}"]`;return document.querySelector(e)}function ta(){const r=Array.from(document.querySelectorAll('span[wire\\:key^="paginator-page-"]'));return r.length?+r[r.length-1].getAttribute("wire:key").split("-").slice(-1)[0].replace("page",""):1}var ra=Object.defineProperty,aa=Object.defineProperties,na=Object.getOwnPropertyDescriptors,ct=Object.getOwnPropertySymbols,la=Object.prototype.hasOwnProperty,ia=Object.prototype.propertyIsEnumerable,ut=(r,e,t)=>e in r?ra(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,te=(r,e)=>{for(var t in e||(e={}))la.call(e,t)&&ut(r,t,e[t]);if(ct)for(var t of ct(e))ia.call(e,t)&&ut(r,t,e[t]);return r},re=(r,e)=>aa(r,na(e));class pt extends x{async getRawTitleData(){var e,t;const a=await super.getRawTitleData();if(!a)return;const n=(e=g(".info-detail__row > .genre-btn,.info__right .stats__row:first-child|text",{returnAll:!0}))==null?void 0:e.map(l=>[l,...l.split(" ")]).flat();return dt(re(te({},a),{tags:(t=this.getTagIdsFromNames(n))!=null?t:[]}),".episode-header .episode-cnt")}async getRawReaderData(){const e=await super.getRawReaderData();if(e)return re(te({},e),{title:dt(re(te({},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,a=1e3,n=t?Math.floor(t/1e3)+1:1;try{const l=await fetch(`/series/${e}/episodes?page=${n}&sort=NEWEST&max_limit=${a}`);return sa(await l.json())}catch{return}}resolveTitleSlug(e){var t;if(!e)return;const a=e.split("/").filter(Boolean);return(t=a[1])!=null?t:a[0]}}pt.specId="tapas";function dt(r,e){const t=oa(e)>20;return re(te({},r),{chapters:t?[]:r.chapters,hasMoreChapters:t})}function sa(r){var e,t,a;const n=(e=r?.data)==null?void 0:e.episodes;if(!Array.isArray(n))return;const l=n.map(s=>{var c,o,u;return{chap:(c=s.pending_scene)!=null?c:s.scene,slug:s.id+"",ts:((u=(o=new Date(s.publish_date))==null?void 0:o.valueOf)==null?void 0:u.call(o))||void 0}}),i=(t=r?.data)==null?void 0:t.pagination;return{chapters:l,total:(a=i?.total)!=null?a:l.length,hasMore:!!(i!=null&&i.has_next)}}function oa(r){var e;const t=document.querySelector(r);return+(((e=t?.textContent)==null?void 0:e.trim().split(" ")[0])||0)}const ca=[De,Ie,Ee,ze,Ke,rt,st,pt,Je];function gt(r){var e;const t=(e=ca.find(a=>a.specId===r.spec.id))!=null?e:x;return new t(r)}var ua=Object.defineProperty,pa=Object.defineProperties,da=Object.getOwnPropertyDescriptors,ht=Object.getOwnPropertySymbols,ga=Object.prototype.hasOwnProperty,ha=Object.prototype.propertyIsEnumerable,ft=(r,e,t)=>e in r?ua(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,vt=(r,e)=>{for(var t in e||(e={}))ga.call(e,t)&&ft(r,t,e[t]);if(ht)for(var t of ht(e))ha.call(e,t)&&ft(r,t,e[t]);return r},mt=(r,e)=>pa(r,da(e));async function fa(r){var e,t;const{spec:a}=r;if(a){const n=(e=r.siteMeta)!=null?e:a.meta,l=r.type?[r.type]:yt(n,a.generic);if(!l.length)return;const i=gt(mt(vt({},r),{spec:a,siteMeta:n}));return await q(l.map(s=>i.getRawPageByType(s)))}return await q(((t=r.genericSpecs)!=null?t:[]).map(n=>{const l=yt(n.meta,n.generic);if(!l.length)return[];const i=gt(mt(vt({},r),{spec:n,siteMeta:n.meta}));return l.map(s=>i.getRawPageByType(s,!0))}).flat())}function yt(r,e){if(location.pathname==="/")return[];const{titleBase:t,readerBase:a}=r,n=location.pathname.split("/").filter(Boolean),l=wt(n,a),i=wt(n,t);if(l!==i)return l>i?[b.reader]:[b.title];if(l>0)return[b.reader,b.title];if(n.length===1){const s=[!a&&b.reader,!t&&b.title].filter(Boolean);if(s.length)return s}return e?[b.reader,b.title]:[]}function wt(r,e){if(!e)return 0;const t=e.split("/").filter(Boolean),a=t.includes("{slug}"),n=r.length-t.length;return a&&n!==0||!a&&n<1?0:t.filter((l,i)=>r[i]===l||l==="{titleSlug}"||l==="{lang}"||l==="{slug}").length}W.PageType=b,W.scrape=fa});
1
+ (function(W,q){typeof exports=="object"&&typeof module<"u"?q(exports):typeof define=="function"&&define.amd?define(["exports"],q):(W=typeof globalThis<"u"?globalThis:W||self,q(W._trackkun_={}))})(this,function(W){"use strict";function q(r){let e=!1;return new Promise((t,a)=>{Promise.all(r.map(async n=>{const l=await n;!e&&l&&(e=!0,t(l))})).then(()=>{e||t(void 0)})})}function ge(r,{removeTrailingSlash:e=!0}={}){if(!r)return;const t=e&&r.endsWith("/")?r.slice(0,-1):r;try{return new URL(t)}catch{return}}function j(r){var e,t;if(!(!r||typeof r!="string"))return r.startsWith("http://")||r.startsWith("https://")?(e=ge(r))==null?void 0:e.pathname:r.startsWith("//")?(t=ge(`https:${r}`))==null?void 0:t.pathname:r}const Ot={text:St,attr:Pt,"attr-contain":jt,value:Dt,row:xt};function g(r,e={}){if(!r)return;const{root:t=document.documentElement,returnAll:a,preProcess:n}=e,l=he(r);if(l.length>1){for(let p=0;p<l.length;p+=1){const d=g(l[p],e);if(d!=null&&d.length)return d}return}const[i,s]=r.split("|");if(!s)return;const c=(s!=null&&s.startsWith("[")&&s.endsWith("]")?s.substring(1,s.length-1).split(","):[s]).map(p=>{const d=p.indexOf(":"),h=d!==-1;return{action:h?p.substring(0,d):p,param:h?p.substring(d+1):""}}),o=i?Array.from(t.querySelectorAll(i)):[t];if(!o.length)return a?[]:void 0;n&&n(o);const u=[];for(const p of o)for(const d of c){const h=Ot[d.action],f=h(p,d.param);if(f){if(a){u.push(f);break}return f}}return a?u:void 0}function St(r){return Array.from(r.childNodes).filter(e=>e.nodeType===3).map(e=>z(e.textContent)).filter(Boolean).join(" ").trim()||z(r.textContent)}function Pt(r,e){return z(r.getAttribute(e))}function jt(r,e){let t=r.getAttribute(e);if(!t){const a=r.getAttributeNames().find(n=>n.includes(e));a&&(t=r.getAttribute(a))}return z(t)}function he(r){const e=[],t=r.split("||").map(a=>a.trim()).filter(Boolean);return t.forEach((a,n)=>{if(a.includes("|")){e.push(a);return}const l=t[n+1];l&&(t[n+1]=`${a},${l}`)}),e}function Dt(r){return r.value}function xt(r,e){var t,a,n,l;if(!e)return;const i=(t=z(r.textContent))==null?void 0:t.toLowerCase(),s=e.toLowerCase();if(!(i!==s&&i!==`${s}:`))return z((l=(a=r.nextElementSibling)==null?void 0:a.textContent)!=null?l:(n=r.nextSibling)==null?void 0:n.textContent)}function z(r){if(r)return r?.replace(/(\n|\t)/g," ").trim()||void 0}async function H(r,e,t){const a=await t(()=>{r=0});if(a!==void 0)return a;if(!(r<=0))return await new Promise(n=>{setTimeout(async()=>{const l=await H(r-1,e,t);n(l)},e)})}async function U(r,e,t=0){var a;const n=(a=e.root)!=null?a:document.documentElement;return H(e.lazy===!0?200:0,100,()=>{var l;const i=e.all===!0?Array.from(n.querySelectorAll(r)):(l=n.querySelector(r))!=null?l:void 0;return(e.all?!(i!=null&&i.length):!i)?void 0:i})}const Ct=/(vol(ume)?|season)(\s*|-|\.)(\d+)/i,Tt=/(ch(ap(t(er)?|\.)?|\.)?|^#|episode\.?)(\s*|-)(\d+([_-~,.]\d+)?)/i,Mt=/\d+([_-~,.]\d+)?/,It=/[_-~,]/;function J(r){var e;if(!r||!r)return;if(!isNaN(+r))return{chap:+r};const t=r.match(Ct),a=t!=null&&t[0]?r.replace(t[0],"").trim():r,n=a.match(Tt),l=a.match(Mt),i=(e=n?.[6])!=null?e:l?.[0];if(!i)return;const s=+i.replace(It,".");if(isNaN(s))return;const c=t?.[4];return{vol:c&&!isNaN(+c)?+c:void 0,chap:s}}function F(r){return r.sort((e,t)=>e.vol===void 0||t.vol===void 0?t.chap-e.chap:t.vol-e.vol||t.chap-e.chap),Nt(r)}function Nt(r){let e;for(let t=r.length-1;t>=0;t--){const a=r[t];a.vol!==void 0?e=a.vol:e!==void 0&&(a.inferVol=e)}return r}const Bt=[{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 fe(r){const e=r?.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 l=t.valueOf();if(!isNaN(l))return t.getHours()===0&&t.getMinutes()===0?Math.min(Date.now(),l+432e5):l}const a=Bt.find(l=>l.regex.test(e));if(!a)return;const n=e.split(" ").filter(Boolean);for(let l=0;l<n.length;l++){const i=n[l],s=i==="a"||i==="an"?1:+i;if(!s)continue;if(s<0)return;const c=Date.now()-s*a.seconds*1e3;return c>0?c:void 0}}function ne(r,e=location.origin){if(!r)return;const t=r.startsWith("//")?`${location.protocol}${r}`:r;return t.startsWith(e)?t.replace(e,""):t}function ve(r,e){if(!r)return"/";const t=r.replace("{titleSlug}",e),a=t.endsWith("/")?t:t+"/";return a.startsWith("/")?a:"/"+a}var At=Object.defineProperty,me=Object.getOwnPropertySymbols,Et=Object.prototype.hasOwnProperty,_t=Object.prototype.propertyIsEnumerable,ye=(r,e,t)=>e in r?At(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,Lt=(r,e)=>{for(var t in e||(e={}))Et.call(e,t)&&ye(r,t,e[t]);if(me)for(var t of me(e))_t.call(e,t)&&ye(r,t,e[t]);return r};function we(r,e){var t,a;const n=[...e],l=[];let i=-1,s=-1;for(let o=0;o<r.length&&!(!n.length&&o>=10);o++){const u=Lt({},r[o]),p=n.findIndex(f=>f.slug===u.slug&&f.name===u.name),d=p===-1?void 0:n.splice(p,1)[0],h=!d||((t=d.chapters[0])==null?void 0:t.chap)!==((a=u.chapters[0])==null?void 0:a.chap);p!==-1&&(s=o),h&&(i=o,u.changed=!0),l.push(u)}if(i===-1)return[];if(n.length&&n.length!==e.length){const o=Math.max(10,s+1);l.splice(o);for(let u=s+1;u<l.length;u++)l[u].changed=!1;return l}const c=Math.min(Math.max(i+1,10),Math.max(s+1,100));return l.slice(0,c)}var kt=Object.defineProperty,Wt=Object.defineProperties,qt=Object.getOwnPropertyDescriptors,be=Object.getOwnPropertySymbols,zt=Object.prototype.hasOwnProperty,Ut=Object.prototype.propertyIsEnumerable,Re=(r,e,t)=>e in r?kt(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,Ft=(r,e)=>{for(var t in e||(e={}))zt.call(e,t)&&Re(r,t,e[t]);if(be)for(var t of be(e))Ut.call(e,t)&&Re(r,t,e[t]);return r},Vt=(r,e)=>Wt(r,qt(e));function $e(r,e){const t={};return r.forEach(a=>{Object.values(a.chapters.reduce((n,l)=>{const i=l.lang||e||"default";return n[i]||(n[i]=[]),n[i].push(l),n},{})).forEach(n=>{var l,i;const s=(i=(l=n[0])==null?void 0:l.lang)!=null?i:e,c=`${a.slug}:${s||""}`;t[c]?(t[c].chapters.push(...n),F(t[c].chapters)):t[c]=Vt(Ft({},a),{lang:s})})}),Object.values(t)}var b=(r=>(r.title="title",r.reader="reader",r.releases="releases",r.chapters="chapters",r.search="search",r))(b||{});let Ht=class{constructor(e){this.methodsMap={[b.title]:()=>this.getRawTitleData(),[b.reader]:()=>this.getRawReaderData(),[b.releases]:()=>this.getRawReleasesData(),[b.search]:()=>this.getRawSearchData(),[b.chapters]:()=>this.getRawChaptersData()},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 a=await this.methodsMap[e]();if(t&&!a)return;const n=location.origin+location.pathname;return{type:e,is404:Gt(this.spec),specId:this.spec.id,siteName:g(this.spec.name),url:n,data:a}}resolveReaderSlug(e,t){return t.startsWith(e)?t.replace(e,""):t}resolveTitleSlug(e){var t;if(typeof e!="string")return;const a=(t=j(e))==null?void 0:t.split("/").filter(Boolean);return!a||!a.length?e:a[a.length-1]}finalizeRawReleasesData(e){var t,a,n;const l=(a=(t=this.spec.releases)==null?void 0:t.title)!=null&&a.lang?this.siteMeta.defaultLang:void 0,i=$e(e.rawReleases,l);if(i.length)return{rawReleases:(n=this.context)!=null&&n.oldRawReleases?we(i,this.context.oldRawReleases):i}}getTagIdsFromNames(e){var t;if(!(e!=null&&e.length))return;const a=(t=this.normalizedTagsMap)!=null?t:this.normalizedTagsMap=Jt(this.tags),n=e.map(l=>a[le(l)]).filter(Boolean);return n.length===0?void 0:Array.from(new Set(n)).sort((l,i)=>l-i)}};function Jt(r){const e={};return r.forEach(({id:t,name:a,altNames:n})=>{e[le(a)]=t,n&&n.forEach(l=>{e[le(l)]=t})}),e}function le(r){const e=r.toLowerCase().replaceAll(" ","").replaceAll("-","");return e[e.length-1]==="s"?e.substring(0,e.length-1):e}function Gt(r){return r[404]&&document.querySelector(r[404])?!0:document.title.toLowerCase().includes("not found")}var Qt=Object.defineProperty,Yt=Object.defineProperties,Kt=Object.getOwnPropertyDescriptors,Y=Object.getOwnPropertySymbols,Oe=Object.prototype.hasOwnProperty,Se=Object.prototype.propertyIsEnumerable,Pe=(r,e,t)=>e in r?Qt(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,B=(r,e)=>{for(var t in e||(e={}))Oe.call(e,t)&&Pe(r,t,e[t]);if(Y)for(var t of Y(e))Se.call(e,t)&&Pe(r,t,e[t]);return r},E=(r,e)=>Yt(r,Kt(e)),je=(r,e)=>{var t={};for(var a in r)Oe.call(r,a)&&e.indexOf(a)<0&&(t[a]=r[a]);if(r!=null&&Y)for(var a of Y(r))e.indexOf(a)<0&&Se.call(r,a)&&(t[a]=r[a]);return t};class x extends Ht{async getRawReleasesData(){var e,t;if(!((t=(e=this.spec)==null?void 0:e.releases)!=null&&t.title))return;const a=this.spec.releases.title,{chapter:n}=a,l=je(a,["chapter"]),i=await U(l.sel,{lazy:!0,all:!0});if(!(i!=null&&i.length))return;const s=i.slice(0,100).map(o=>{const u=g(l.url,{root:o}),p=j(u),d=g(l.name,{root:o}),h=g(l.at,{root:o});if(!(!p||!d))return{titleEl:o,id:g(l.id,{root:o}),path:p,img:ne(g(l.img,{root:o})),name:d,lang:g(l.lang,{root:o}),at:h?fe(h):void 0}}).filter(Boolean);if(!s.length)return;const c=await Promise.all(s.map(async o=>{var u;const p=o,{path:d,titleEl:h,lang:f,at:v}=p,y=je(p,["path","titleEl","lang","at"]),S=this.resolveTitleSlug(d),R=(u=await this.getChapters(n,{root:h,titleSlug:S}))!=null?u:[];return B({slug:S,chapters:f||v?R.map(m=>{var P,w;return E(B({},m),{lang:(P=m.lang)!=null?P:f,ts:(w=m.ts)!=null?w:v})}):R},y)}));return this.finalizeRawReleasesData({rawReleases:c})}async getRawTitleData(){var e,t;const a=this.spec.title;if(!a||a.sel&&!await U(a.sel,{lazy:!!a.lazy}))return;const n=g(a.name);if(!n)return;const l=this.resolveTitleSlug(location.pathname);if(!l)return;let i=(e=g(a.tags,{returnAll:!0}))!=null?e:[];i.length===1&&(i=i[0].split(",").map(o=>o.trim()).filter(Boolean));const s=g(a.type),c=g(a.langs,{returnAll:!0});return{id:g(a.id),url:location.origin+location.pathname,slug:l,name:n,langs:c!=null&&c.length?c:a.langs&&this.siteMeta.defaultLang?[this.siteMeta.defaultLang]:void 0,tags:this.getTagIdsFromNames([...i??[],...s?[s]:[]]),chapters:(t=await this.getChapters(a.chapter,{lazy:!0,titleSlug:l}))!=null?t:[],img:ne(g(a.img))}}async getRawReaderData(){var e,t,a,n,l;const{spec:i,siteMeta:s}=this;if(!(i!=null&&i.reader)||i.generic&&!await x.isReaderPage(i.reader))return;const c=i.reader.title,o=document.querySelector(c.sel);if(!o)return;const u=g(c.name,{root:o}),p=g(c.url,{root:o}),d=this.resolveTitleSlug(p),h=g(c.img,{root:o});if(!u||!p||!d)return;const f=(t=await this.getChapters((e=i.reader)==null?void 0:e.chapter,{titleSlug:d}))!=null?t:[],v=(a=g(i.reader.label))==null?void 0:a.toLowerCase().replace(u.toLowerCase(),"");if(!v)return;const{vol:y,chap:S=0}=J(v)||{};let R;const m=(n=g(i.reader.img,{returnAll:!0,preProcess(O){const M=O.map(T=>+(T.getAttribute("height")||0)/+(T.getAttribute("width")||1));M.some(T=>T>2.5)?R=!0:M.filter(Boolean).length>Math.max(1,M.length-2)&&(R=!1)}}))!=null?n:[];if(!m.length)return;const P=ve(s.readerBase,d),w=s.readerBase.split("/").indexOf("{lang}"),$=w!==-1?location.pathname.substring(1).split("/")[w]:void 0,D=$?P.replace("{lang}",$):P,C=(l=$??g(i.reader.lang))!=null?l:i.reader.lang?this.siteMeta.defaultLang:void 0;return this.finalizeRawReaderData({isWebtoon:R,vol:y,chap:S,lang:C,slug:this.resolveReaderSlug(D,location.pathname),basePath:D,imgs:m,imgsLocator:i.reader.img,title:{id:g(c.id),url:p,slug:d,name:u,langs:C?[C]:void 0,img:h,chapters:f}},{prevSlug:this.findNeighborChapter({sel:i.reader.prev,basePath:D}),nextSlug:this.findNeighborChapter({sel:i.reader.next,basePath:D})})}async getRawChaptersData(){var e;const t=await this.getRawTitleData();if(!t)return;const a=(e=this.context)==null?void 0:e.lang,{chapters:n}=t;return{chapters:a?n.filter(l=>!l.lang||l.lang===a):n,title:E(B({},t),{chapters:[]}),hasMore:!1,asc:!1,total:n.length}}async getRawSearchData(){var e;const t=(e=this.spec.search)==null?void 0:e.title;if(!t)return;const{chapter:a}=t,n=[];return await Promise.all(Array.from(document.querySelectorAll(t.sel)).map(async l=>{var i;const s=g(t.url,{root:l}),c=j(s),o=g(t.name,{root:l}),u=this.resolveTitleSlug(c);!c||!o||!u||n.push({slug:u,name:o,chapters:(i=await this.getChapters(a,{root:l,titleSlug:u}))!=null?i:[]})})),n.length?{rawReleases:n}:void 0}async getChapters(e,{root:t=document.documentElement,titleSlug:a="",lazy:n=!0}){var l;if(!e)return;const i=[],s=await U(e.sel,{root:t,all:!0,lazy:n});if(!(s!=null&&s.length))return i;const c=(s??[]).map(v=>({id:g(e.id,{root:v}),label:g(e.label,{root:v}),url:g(e.url,{root:v}),at:g(e.at,{root:v})})),o=c.map(({label:v})=>J(v)),u=(l=o[1])==null?void 0:l.chap;!o[0]&&(u===void 0||u<=1)&&(o[0]={chap:0});const{readerBase:p}=this.siteMeta,d=ve(p,a),h=p.split("/").indexOf("{lang}"),f=h!==-1;return o.forEach((v,y)=>{var S;if(!v)return;const{id:R,url:m,at:P}=c[y],w=m?.startsWith("http")&&!m.startsWith(location.origin),$=w?m:j(m);if(!$)return;const D=!w&&f?$?.substring(1).split("/")[h]:void 0,C=w?$:this.resolveReaderSlug(D?d.replace("{lang}",D):d,$);i.push(E(B({},v),{id:R,slug:C,lang:D,ts:fe(P)||((S=i[i.length+1])==null?void 0:S.ts)||Date.now()}))}),F(i)}static async isReaderPage(e){const{sel:t,img:a}=e;if(!t||!a||!await U(t,{lazy:!!e.lazy}))return!1;const n=he(a).map(l=>l.split("|")[0]).join(",");return!!await U(n,{lazy:!0})}findNeighborChapter({sel:e,basePath:t}){const a=g(e);if(!a||a.startsWith("#")||a.startsWith("/#"))return;const n=j(a);return n?this.resolveReaderSlug(t,n):void 0}finalizeRawReaderData(e,{prevSlug:t,nextSlug:a}={}){var n;const l=(n=e.title)==null?void 0:n.chapters;if(!(l!=null&&l.length)){const u=J(t),p=J(a);return!u&&!p?e:E(B({},e),{prev:u?E(B({},u),{slug:t}):void 0,next:p?E(B({},p),{slug:a}):void 0})}let i,s,c,o;for(let u=0;u<l.length&&!(i&&(!t||c)&&!a&&o);u++){const p=l[u];!i&&(e.slug==p.slug||e.chap===p.chap&&(e.vol===p.vol||e.vol===void 0))?(i=p,s=u):!c&&t===p.slug?c=p:!o&&a===p.slug&&(o=p)}return s!==void 0&&(c!=null||(c=l[s+1]),o!=null||(o=l[s-1])),E(B({},e),{inferVol:i?.inferVol,prev:c,next:o})}}class De extends x{resolveTitleSlug(e){var t;return(t=j(e))==null?void 0:t.split("/").filter(Boolean)[1]}}De.specId="bato";function Xt(){return Math.random().toString(16).slice(2)}async function Zt({addListener:r,removeListener:e,transform:t,filter:a,handler:n,onTimeout:l,timeout:i,once:s}){return new Promise(c=>{r(p);const o=()=>s===!0&&e(p),u=i?setTimeout(()=>{o(),c(void 0),l?.()},i):void 0;async function p(d,...h){d=t?t(d):d,d!==void 0&&(!a||a(d,...h))&&(o(),c(d),n?.(d,...h),u&&clearTimeout(u))}})}var er=Object.defineProperty,xe=Object.getOwnPropertySymbols,tr=Object.prototype.hasOwnProperty,rr=Object.prototype.propertyIsEnumerable,Ce=(r,e,t)=>e in r?er(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,ar=(r,e)=>{for(var t in e||(e={}))tr.call(e,t)&&Ce(r,t,e[t]);if(xe)for(var t of xe(e))rr.call(e,t)&&Ce(r,t,e[t]);return r};async function nr(r){const e=await Zt(ar({addListener:t=>window.addEventListener("message",t),removeListener:t=>window.removeEventListener("message",t)},r));return e?.data}async function lr(r){var e;const{receiverWindow:t,timeout:a,targetOrigin:n,event:l,args:i}=r,s={reqId:Xt(),event:l,args:i};(e=t||window)==null||e.postMessage(s,n??"*");const c=await nr({filter:o=>{var u;return((u=o?.data)==null?void 0:u.resId)===s.reqId},timeout:a??3e4,once:!0});return c?.result}const I={isAny:!0};function A(r,...e){return lr({event:"tk:fetchResult",args:{baseUrl:r,segments:e}})}function ir(r){if(r)try{return JSON.parse(r)}catch{return}}var sr=Object.defineProperty,or=Object.defineProperties,cr=Object.getOwnPropertyDescriptors,Te=Object.getOwnPropertySymbols,ur=Object.prototype.hasOwnProperty,pr=Object.prototype.propertyIsEnumerable,Me=(r,e,t)=>e in r?sr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,K=(r,e)=>{for(var t in e||(e={}))ur.call(e,t)&&Me(r,t,e[t]);if(Te)for(var t of Te(e))pr.call(e,t)&&Me(r,t,e[t]);return r},X=(r,e)=>or(r,cr(e));class Ie extends x{async getRawReleasesData(){let e=[];try{e=await(await fetch("https://api.comick.app/chapter?page=1&device-memory=8&order=hot&accept_erotic_content=true")).json()}catch{return}const t=[];return e.forEach(a=>{const{vol:n,chap:l,hid:i,lang:s,updated_at:c,md_comics:o}=a,u=typeof l=="string"&&!isNaN(+l)?+l:void 0;typeof u=="number"&&t.push({id:o.hid,slug:o.slug,name:o.title,chapters:[{slug:i,vol:typeof n=="string"&&!isNaN(+n)?+n:void 0,chap:u,lang:s,ts:new Date(c).valueOf()}]})}),super.finalizeRawReleasesData({rawReleases:t})}async getRawTitleData(){var e,t,a,n,l,i,s,c;const o=await super.getRawTitleData();if(!o)return o;const u=await A("https://api.comick.app/","comic",I,"chapters");if(!u)return o;const p=await dr(o.slug),d=Ne(u),h=g("h1 ~ div.text-sm span:first-child|row:demographic"),f=h?(e=this.getTagIdsFromNames([h]))==null?void 0:e[0]:void 0;return f&&!((t=o.tags)!=null&&t.includes(f))&&((a=o.tags)==null||a.push(f),(n=o.tags)==null||n.sort((v,y)=>v-y)),X(K({},o),{img:(i=o.img)!=null?i:ne(g((l=this.spec.title)==null?void 0:l.img)),id:p,hasMoreChapters:(s=d?.hasMore)!=null?s:!1,chapters:(c=d?.chapters)!=null?c:[]})}async getRawReaderData(){var e,t,a,n,l,i,s;const c=await super.getRawReaderData();if(!c)return c;const o=await A("/_next/data/",I,"comic",I),u=(e=o?.comic)==null?void 0:e.hid,p=(n=(a=(t=o?.comic)==null?void 0:t.md_comic_md_genres)==null?void 0:a.map)==null?void 0:n.call(a,h=>{var f;return(f=h?.md_genre)==null?void 0:f.name}),d=(s=(i=(l=o?.comic)==null?void 0:l.md_covers)==null?void 0:i[0])==null?void 0:s.b2key;return X(K({},c),{title:X(K({},c.title),{id:u?u+"":void 0,tags:this.getTagIdsFromNames(p),img:typeof d=="string"?`https://meo.comick.pictures/${d}`:void 0})})}async getRawChaptersData(){var e;if(!((e=this.context)!=null&&e.rawId))return;const{rawId:t,lang:a="en",skip:n}=this.context,l=n?Math.floor(n/1e3)+1:void 0;try{const i=await fetch(`https://api.comick.app/comic/${t}/chapters?lang=${a}&limit=1000${l&&l>1?`&page=${l}`:""}`),s=Ne(await i.json());return s?X(K({},s),{lang:a,asc:!1}):void 0}catch{return}}}Ie.specId="comick";function Ne(r){var e;if(!Array.isArray(r?.chapters))return;const t=[];return r.chapters.forEach(a=>{const{vol:n,chap:l,hid:i,lang:s,updated_at:c}=a,o=typeof l=="string"&&!isNaN(+l)?+l:void 0;typeof o!="number"||t.some(u=>u.vol==n&&u.chap===o&&u.lang===s)||t.push({slug:i,vol:typeof n=="string"&&!isNaN(+n)?+n:void 0,chap:o,lang:s,ts:new Date(c).valueOf()})}),{chapters:F(t),total:(e=r.total)!=null?e:t.length,hasMore:r.total>r.limit}}async function dr(r){var e,t,a,n,l,i,s,c,o;const u=(e=document.querySelector("script#__NEXT_DATA__"))==null?void 0:e.textContent,p=u?ir(u):void 0;if(((t=p?.query)==null?void 0:t.slug)===r)return(i=(l=(n=(a=p?.props)==null?void 0:a.pageProps)==null?void 0:n.comic)==null?void 0:l.hid)!=null?i:void 0;const d=await A("/_next/data/",I,"comic",r,"covers.json");return(o=(c=(s=d?.pageProps)==null?void 0:s.comic)==null?void 0:c.hid)!=null?o:void 0}var gr=Object.defineProperty,hr=Object.defineProperties,fr=Object.getOwnPropertyDescriptors,Be=Object.getOwnPropertySymbols,vr=Object.prototype.hasOwnProperty,mr=Object.prototype.propertyIsEnumerable,Ae=(r,e,t)=>e in r?gr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,ie=(r,e)=>{for(var t in e||(e={}))vr.call(e,t)&&Ae(r,t,e[t]);if(Be)for(var t of Be(e))mr.call(e,t)&&Ae(r,t,e[t]);return r},se=(r,e)=>hr(r,fr(e));class Ee extends x{resolveReaderSlug(e,t){return super.resolveReaderSlug(e,t).replace(/-page-\d{1,3}\.html$/,".html")}async getRawTitleData(){const e=await super.getRawTitleData();return e&&se(ie({},e),{chapters:_e(await this.getVM(),e.slug),hasMoreChapters:!1})}async getRawReaderData(){const e=await super.getRawReaderData();if(!e)return e;const t=await this.getVM();return console.log("vm",t),this.finalizeRawReaderData(se(ie({},e),{imgs:yr(t,e.imgs[0]),title:se(ie({},e.title),{chapters:_e(t,e.title.slug),hasMoreChapters:!1})}))}getVM(){return H(40,50,()=>{var e,t,a,n;return(n=(a=(t=(e=window.angular)==null?void 0:e.element)==null?void 0:t.call(e,document.documentElement))==null?void 0:a.scope())==null?void 0:n.vm})}}Ee.specId="manga4life";function _e(r,e){var t,a;return((a=(t=r?.Chapters)!=null?t:r?.CHAPTERS)!=null?a:[]).sort((n,l)=>l.Chapter-n.Chapter).map(n=>{const l=+n.Chapter.substring(1)/10;return{slug:`${e}-chapter-${l}.html`,chap:l,ts:new Date(n.Date).valueOf()}})}function yr(r,e){let t=e.split(".").slice(-1)[0];t=t.length>=3&&t.length<=4?t:"png";try{const a=r.CurChapter.Chapter.slice(1,-1),n=r.CurChapter.Chapter[r.CurChapter.Chapter.length-1],l=n!=="0"?`${a}.${n}`:a,i=`https://${r.CurPathName}/manga/${r.IndexName}/${r.CurChapter.Directory?`${r.CurChapter.Directory}/`:""}${l}-`;return r.Pages.map(s=>{const c=(s+"").padStart(3,"0");return`${i}${c}.${t}`})}catch{return[]}}class wr{constructor(e){this.methodsMap={[b.title]:()=>this.getRawTitleData(),[b.reader]:()=>this.getRawReaderData(),[b.releases]:()=>this.getRawReleasesData(),[b.search]:()=>this.getRawSearchData(),[b.chapters]:()=>this.getRawChaptersData()},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 a=await this.methodsMap[e]();if(t&&!a)return;const n=location.origin+location.pathname;return{type:e,is404:Rr(this.spec),specId:this.spec.id,siteName:g(this.spec.name),url:n,data:a}}resolveReaderSlug(e,t){return t.startsWith(e)?t.replace(e,""):t}resolveTitleSlug(e){var t;if(typeof e!="string")return;const a=(t=j(e))==null?void 0:t.split("/").filter(Boolean);return!a||!a.length?e:a[a.length-1]}finalizeRawReleasesData(e){var t,a,n;const l=(a=(t=this.spec.releases)==null?void 0:t.title)!=null&&a.lang?this.siteMeta.defaultLang:void 0,i=$e(e.rawReleases,l);if(i.length)return{rawReleases:(n=this.context)!=null&&n.oldRawReleases?we(i,this.context.oldRawReleases):i}}getTagIdsFromNames(e){var t;if(!(e!=null&&e.length))return;const a=(t=this.normalizedTagsMap)!=null?t:this.normalizedTagsMap=br(this.tags),n=e.map(l=>a[oe(l)]).filter(Boolean);return n.length===0?void 0:Array.from(new Set(n)).sort((l,i)=>l-i)}}function br(r){const e={};return r.forEach(({id:t,name:a,altNames:n})=>{e[oe(a)]=t,n&&n.forEach(l=>{e[oe(l)]=t})}),e}function oe(r){const e=r.toLowerCase().replaceAll(" ","").replaceAll("-","");return e[e.length-1]==="s"?e.substring(0,e.length-1):e}function Rr(r){return r[404]&&document.querySelector(r[404])?!0:document.title.toLowerCase().includes("not found")}var $r=Object.defineProperty,Or=Object.defineProperties,Sr=Object.getOwnPropertyDescriptors,Le=Object.getOwnPropertySymbols,Pr=Object.prototype.hasOwnProperty,jr=Object.prototype.propertyIsEnumerable,ke=(r,e,t)=>e in r?$r(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,We=(r,e)=>{for(var t in e||(e={}))Pr.call(e,t)&&ke(r,t,e[t]);if(Le)for(var t of Le(e))jr.call(e,t)&&ke(r,t,e[t]);return r},qe=(r,e)=>Or(r,Sr(e));class ze extends wr{resolveTitleSlug(e){var t;return(t=j(e))==null?void 0:t.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:a,attributes:n,id:l})=>{const i=a.find(({type:o})=>o==="manga"),s=typeof n.volume=="string"?+n.volume:void 0,c=typeof n.chapter=="string"?+n.chapter:void 0;c&&t.push({slug:i.id,name:Object.values(i.attributes.title)[0],chapters:[{slug:n.externalUrl||l,vol:s,chap:c,lang:n.translatedLanguage,ts:new Date(n.readableAt).valueOf()}]})}),super.finalizeRawReleasesData({rawReleases:t})}async getRawTitleData(){var e,t,a;const n="https://api.mangadex.org/manga/",[l,i]=await Promise.all([A(n,I),A(n,I,"feed")]);if(!l||!i)return;const s=(a=(t=(e=i.data)==null?void 0:e.map)==null?void 0:t.call(e,u=>{const{attributes:p,id:d}=u;if(typeof p!="object"||typeof d!="string"||!d)return;const{externalUrl:h,title:f,volume:v,chapter:y,translatedLanguage:S}=p;return{slug:h||d,label:f||void 0,vol:typeof v=="string"?+v:void 0,chap:typeof y=="string"?+y:void 0,lang:S||"en",ts:new Date(p.readableAt).valueOf()}}).filter(u=>u?.chap!=null))!=null?a:[],{data:c}=l;if(!c)return;const o=Fe({data:c,getTagIdsFromNames:u=>this.getTagIdsFromNames(u)});if(o)return qe(We({},o),{chapters:F(s),hasMoreChapters:(i.total||0)>(i.limit||0)})}async getRawReaderData(){var e,t,a,n,l,i,s,c,o,u,p,d,h,f;const v="https://api.mangadex.org/",[y,S,R]=await Promise.all([A(v,"chapter",I),A(v,"at-home","server",I),A(v,"manga",I,"aggregate")]);if(!y||!S||!R)return;const m=y.data,{volume:P,chapter:w,externalUrl:$,translatedLanguage:D}=m.attributes||{},{baseUrl:C,chapter:{data:O,dataSaver:M,hash:T}}=S,bt=(t=(e=m.relationships)==null?void 0:e.find)==null?void 0:t.call(e,N=>N.type==="manga");if(!bt)return;const Rt=Fe({data:bt,getTagIdsFromNames:N=>this.getTagIdsFromNames(N)});if(!Rt||typeof R.volumes!="object")return;const k=(a=Ue(R))!=null?a:[];(typeof w!="string"||w==="none")&&!k.length&&k.push({chap:0,slug:m.id});const de=k.findIndex(N=>N.slug===m.id),ae=(l=(n=m.relationships)==null?void 0:n.find)==null?void 0:l.call(n,N=>N.type==="scanlation_group"),va=C.endsWith("/")?C:C+"/",$t=!!((s=(i=localStorage.getItem("md"))==null?void 0:i.includes)!=null&&s.call(i,'"dataSaver":true')),ma=`${va}${$t?"data-saver":"data"}/`,ya=(p=(u=(o=(c=$t?M:O)!=null?c:[]).map)==null?void 0:u.call(o,N=>`${ma}${T}/${N}`))!=null?p:[];return{externalUrl:$,vol:typeof P=="string"?+P:void 0,inferVol:(d=k[de])==null?void 0:d.inferVol,chap:+w||0,imgs:ya,lang:D,slug:m.id,prev:k[de+1],next:k[de-1],basePath:"/chapter/",groupName:(h=ae?.attributes)==null?void 0:h.name,groupUrl:(f=ae?.attributes)==null?void 0:f.website,title:qe(We({},Rt),{chapters:k})}}async getRawChaptersData(){if(!this.context)return;const{titleSlug:e,lang:t="en"}=this.context;let a;try{const n=await fetch(`https://api.mangadex.org/manga/${e}/aggregate?translatedLanguage[]=${t}`);a=Ue(await n.json())}catch{return}if(a)return{chapters:a,lang:t,asc:!1,hasMore:!1,total:a.length}}}ze.specId="mangadex";function Ue(r){if(typeof r.volumes!="object")return;const e=Object.values(r.volumes).map(({volume:t,chapters:a})=>{const n=t==="none"||typeof t!="string"?void 0:+t;return Object.values(a).map(({id:l,chapter:i})=>typeof i!="string"||i==="none"?void 0:{vol:n,chap:+i,slug:l})}).flat().filter(Boolean).reverse();return F(e)}function Fe({data:r,getTagIdsFromNames:e}){var t,a,n,l,i,s;const{id:c,attributes:o,relationships:u}=r;if(!c||typeof c!="string"||typeof o!="object")return;const{title:p,availableTranslatedLanguages:d,altTitles:h,tags:f,contentRating:v}=o;if(typeof p!="object"||d&&!Array.isArray(d))return;const y=Object.values(p)[0];if(!y||typeof y!="string")return;const S=Dr(),R=(n=(a=(t=d??[])==null?void 0:t.map)==null?void 0:a.call(t,O=>typeof O=="string"?O:void 0).filter(Boolean))!=null?n:[],m=R.filter(O=>O&&(!S||S.includes(O))),P=(l=h?.map)==null?void 0:l.call(h,O=>{const[[M,T]=[]]=Object.entries(O);return{lang:M,name:T}}),w=(i=u?.find)==null?void 0:i.call(u,O=>O.type==="cover_art"),$=(s=w?.attributes)==null?void 0:s.fileName,D=$?`https://mangadex.org/covers/${c}/${$}`:void 0,C=(f||[]).map(O=>{var M,T;return(T=(M=O?.attributes)==null?void 0:M.name)==null?void 0:T.en}).concat(v).filter(Boolean);return{url:`${location.origin}/title/${c}`,slug:c,name:y,altNames:P,langs:m.length>0?m:R.length>0?R:["en"],img:D,tags:e(C),isWebtoon:f?.some(O=>O.attributes.name.en==="Long Strip")}}function Dr(){var r;const e=localStorage.getItem("md");if(e)try{const t=JSON.parse(e),a=(r=t?.userPreferences)==null?void 0:r.filteredLanguages;return a!=null&&a.length?a:void 0}catch{return}}var xr=Object.defineProperty,Cr=Object.defineProperties,Tr=Object.getOwnPropertyDescriptors,Ve=Object.getOwnPropertySymbols,Mr=Object.prototype.hasOwnProperty,Ir=Object.prototype.propertyIsEnumerable,He=(r,e,t)=>e in r?xr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,Nr=(r,e)=>{for(var t in e||(e={}))Mr.call(e,t)&&He(r,t,e[t]);if(Ve)for(var t of Ve(e))Ir.call(e,t)&&He(r,t,e[t]);return r},Br=(r,e)=>Cr(r,Tr(e));class Je extends x{async getRawReaderData(){const e=await super.getRawReaderData();return e&&Br(Nr({},e),{imgs:await this.getImgs()})}resolveReaderSlug(e,t){const a=super.resolveReaderSlug(e,t),n=a.split("/").filter(Boolean);return n[n.length-1].startsWith("pg-")?n.slice(0,-1).join("/"):a}async getImgs(){const e=await H(100,20,()=>window.imgsrcs),t=window.CryptoJS,a=t.enc.Hex.parse("e11adc3949ba59abbe56e057f20f883e"),n={iv:t.enc.Hex.parse("1234567890abcdef1234567890abcdef"),padding:t.pad.ZeroPadding};return t.AES.decrypt(e,a,n).toString(t.enc.Utf8).split(",")}}Je.specId="mangago";var Ar=(r=>(r[r.reading=1]="reading",r[r.paused=2]="paused",r[r.plan=3]="plan",r[r.completed=4]="completed",r[r.dropped=5]="dropped",r[r.deleted=6]="deleted",r))(Ar||{}),ce=(r=>(r.id="id",r.name="name",r.slug="slug",r))(ce||{}),Er=(r=>(r.blank="about:blank",r.title="meta.title",r.reader="meta.reader",r))(Er||{}),_r=(r=>(r[r.string=1]="string",r[r.number=2]="number",r[r.bool=3]="bool",r[r.selection=4]="selection",r))(_r||{}),Lr=(r=>(r[r.pending=0]="pending",r[r.completed=1]="completed",r[r.offline=2]="offline",r[r.incompat=3]="incompat",r))(Lr||{}),kr=(r=>(r[r.releases=1]="releases",r[r.img=2]="img",r))(kr||{});function Ge(r,e){const t=r[0]===e?r.substring(1):r;return t[t.length-1]===e?t.substring(0,t.length-1):t}var Wr=Object.defineProperty,qr=Object.defineProperties,zr=Object.getOwnPropertyDescriptors,Qe=Object.getOwnPropertySymbols,Ur=Object.prototype.hasOwnProperty,Fr=Object.prototype.propertyIsEnumerable,Ye=(r,e,t)=>e in r?Wr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,_=(r,e)=>{for(var t in e||(e={}))Ur.call(e,t)&&Ye(r,t,e[t]);if(Qe)for(var t of Qe(e))Fr.call(e,t)&&Ye(r,t,e[t]);return r},V=(r,e)=>qr(r,zr(e));class Ke extends x{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return V(_({},e),{siteMeta:Vr(this.spec.releases,this.siteMeta)})}async getRawTitleData(){var e;const t=await super.getRawTitleData();if(!t)return;const a=L(location.pathname);let n;if((e=t.chapters)!=null&&e.length){const l=this.spec.title.chapter,i=document.querySelector(l.sel),s=j(g(l.url,{root:i}));s&&(n=L(s))}return V(_({},t),{siteMeta:Z(this.siteMeta,{titleBase:a,readerBase:n})})}async getRawReaderData(){const e=await super.getRawReaderData();if(e)return V(_({},e),{siteMeta:Z(this.siteMeta,{titleBase:L(j(e.title.url)),readerBase:L(location.pathname),idBase:Xe()}),title:V(_({},e.title),{id:await this.getReaderTitleId()})})}async getRawSearchData(){const e=await super.getRawSearchData();if(!e)return;const t=this.spec.search.title,a=document.querySelector(t.sel),n=g(t.url,{root:a});return V(_({},e),{siteMeta:Z(this.siteMeta,{titleBase:L(j(n)),idBase:Xe()})})}async getReaderTitleId(){var e,t;const a=await((t=(e=window.HISTORY)==null?void 0:e.getStored)==null?void 0:t.call(e));if(!a||typeof a!="object")return;const n=Object.values(a).filter(Boolean);if(n.length)return n.sort((l,i)=>i.time-l.time),n[0].manga_ID}}Ke.specId="mangastream";function Vr(r,e){var t,a;if(!r)return;const n=V(_({},e),{releases:Ge(location.pathname,"/")}),l=r.title,i=(t=document.querySelector(l.sel))!=null?t:void 0;if(!i)return;const s=j(g(l.url,{root:i}));if(s===void 0)return;const c=(a=i.querySelector(l.chapter.sel))!=null?a:void 0;if(!c)return;const o=j(g(l.chapter.url,{root:c}));if(o!==void 0)return n.titleBase=L(s),n.readerBase=L(o),e.titleIdType===ce.id&&(g(l.id,{root:i})||(e.titleIdType=ce.name)),Z(e,n)}function Xe(){return document.querySelector('link[rel="shortlink"][href*="/?p="]')?"?p=":void 0}function Z(r,e){const t=Object.keys(e),a=_({},r);let n=!1;return t.forEach(l=>{const i=e[l];i!==r[l]&&(a[l]=i,n=!0)}),n?a:void 0}function L(r){return Ge(r,"/").split("/").slice(0,-1).join("/")}var Hr=Object.defineProperty,Jr=Object.defineProperties,Gr=Object.getOwnPropertyDescriptors,Ze=Object.getOwnPropertySymbols,Qr=Object.prototype.hasOwnProperty,Yr=Object.prototype.propertyIsEnumerable,et=(r,e,t)=>e in r?Hr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,ue=(r,e)=>{for(var t in e||(e={}))Qr.call(e,t)&&et(r,t,e[t]);if(Ze)for(var t of Ze(e))Yr.call(e,t)&&et(r,t,e[t]);return r},tt=(r,e)=>Jr(r,Gr(e));class rt extends x{async getRawReaderData(){const e=await super.getRawReaderData();if(!e)return e;let t=e.title.id;if(!t){const a=this.spec.reader.title;a.id&&await U(a.id.split("|")[0],{lazy:!0}),t=g(a.id)}return tt(ue({},e),{title:tt(ue({},e.title),{id:t,chapters:await Kr(t),hasMoreChapters:!1})})}resolveTitleSlug(e){const t=super.resolveTitleSlug(e);if(!t)return;const a=t.lastIndexOf("-"),n=+t.substring(a+1);return a===-1||isNaN(n)||n<1e3?t:t.substring(0,a)}}rt.specId="nettruyen";async function Kr(r){var e;if(!r)return[];const t=await fetch(`/Comic/Services/ComicService.asmx/ProcessChapterList?comicId=${r}`).then(a=>a.status===200?a.json():void 0).catch(()=>[]);return(e=t?.chapters)!=null&&e.length?F(t.chapters.map(a=>{const{name:n,url:l}=a,i=J(n);if(!(!i||!l))return ue({slug:j(l).split("/").filter(Boolean).slice(2).join("/")},i)})):[]}var Xr=Object.defineProperty,Zr=Object.defineProperties,ea=Object.getOwnPropertyDescriptors,ee=Object.getOwnPropertySymbols,at=Object.prototype.hasOwnProperty,nt=Object.prototype.propertyIsEnumerable,lt=(r,e,t)=>e in r?Xr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,G=(r,e)=>{for(var t in e||(e={}))at.call(e,t)&&lt(r,t,e[t]);if(ee)for(var t of ee(e))nt.call(e,t)&&lt(r,t,e[t]);return r},Q=(r,e)=>Zr(r,ea(e)),it=(r,e)=>{var t={};for(var a in r)at.call(r,a)&&e.indexOf(a)<0&&(t[a]=r[a]);if(r!=null&&ee)for(var a of ee(r))e.indexOf(a)<0&&nt.call(r,a)&&(t[a]=r[a]);return t};class st extends x{async getRawTitleData(){const e=await super.getRawTitleData();return e&&Q(G({},e),{hasMoreChapters:!!pe()})}async getRawChaptersData(){var e,t;const a=await this.getRawTitleData();if(!(a!=null&&a.hasMoreChapters))return a;const n=(e=this.context)==null?void 0:e.findContinue;if(n){const d=await this.findContinueChapters({rawTitleData:a,chapter:n});return d?{chapters:d,title:Q(G({},a),{chapters:[]})}:void 0}const l=(t=this.context)==null?void 0:t.skip,i=a,{chapters:s}=i,c=it(i,["chapters"]),o=s.length,u=l&&l>=o?Math.floor(l/o)+1:void 0;if(!u)return{chapters:s,title:Q(G({},c),{chapters:[]}),hasMore:!!pe()};const p=await this.getChaptersByPage({page:u,titleSlug:a.slug});return{chapters:p??[],title:Q(G({},c),{chapters:[]}),hasMore:!!pe(u),asc:!1,skip:l}}async findContinueChapters(e){var t=e,{rawTitleData:a,chapter:{chap:n},curPage:l=1,cacheChaptersByPage:i={}}=t,s=it(t,["rawTitleData","chapter","curPage","cacheChaptersByPage"]),c,o;const u=(c=i[l])!=null?c:a.chapters,p=u[u.length-1].chap<=n,d=(o=s.maxPage)!=null?o:ta();if(p){if(u[0].chap>n){const w=[...u].reverse().find($=>$.chap>n);return w?[w]:u.slice(0,1)}if(l<=1)return u.slice(0,1)}else if(l===d)return u.slice(-1);const h=a.chapters.length,f=Object.keys(i).map(w=>+w).sort((w,$)=>w-$),v=p?-1:1,y=f[f.indexOf(l)+v];if(y===l+v)return p?i[y].slice(-1).concat(u.slice(0,1)):u.slice(-1).concat(i[y].slice(0,1));const S=p?n-u[0].chap:u[0].chap-n,R=Math.floor(S/h)+1,m=p?Math.max(R,(y??1)+1):Math.min(R,(y??d+1)-1,d),P=await this.getChaptersByPage({page:m,titleSlug:a.slug});if(P)return await this.findContinueChapters({rawTitleData:a,chapter:{chap:n},curPage:m,maxPage:d,cacheChaptersByPage:Q(G({},i),{1:a.chapters,[m]:P})})}async getChaptersByPage({page:e,titleSlug:t}){const a=ot(e);if(!a)return;const n=this.spec.title.chapter,l=n.sel,i=document.querySelector(l),s=H(100,30,()=>{const c=document.querySelector(l);if(c&&i!==c)return!0;a.click()});return a.click(),await s,await this.getChapters(n,{lazy:!1,titleSlug:t})}}st.specId="reaper";function pe(r=1){return ot(r+1)}function ot(r){const e=`span[wire\\:key="paginator-page-1-page${r}"] button,button[aria-label="Go to page ${r}"]`;return document.querySelector(e)}function ta(){const r=Array.from(document.querySelectorAll('span[wire\\:key^="paginator-page-"]'));return r.length?+r[r.length-1].getAttribute("wire:key").split("-").slice(-1)[0].replace("page",""):1}var ra=Object.defineProperty,aa=Object.defineProperties,na=Object.getOwnPropertyDescriptors,ct=Object.getOwnPropertySymbols,la=Object.prototype.hasOwnProperty,ia=Object.prototype.propertyIsEnumerable,ut=(r,e,t)=>e in r?ra(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,te=(r,e)=>{for(var t in e||(e={}))la.call(e,t)&&ut(r,t,e[t]);if(ct)for(var t of ct(e))ia.call(e,t)&&ut(r,t,e[t]);return r},re=(r,e)=>aa(r,na(e));class pt extends x{async getRawTitleData(){var e,t;const a=await super.getRawTitleData();if(!a)return;const n=(e=g(".info-detail__row > .genre-btn,.info__right .stats__row:first-child|text",{returnAll:!0}))==null?void 0:e.map(l=>[l,...l.split(" ")]).flat();return dt(re(te({},a),{tags:(t=this.getTagIdsFromNames(n))!=null?t:[]}),".episode-header .episode-cnt")}async getRawReaderData(){const e=await super.getRawReaderData();if(e)return re(te({},e),{title:dt(re(te({},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,a=1e3,n=t?Math.floor(t/1e3)+1:1;try{const l=await fetch(`/series/${e}/episodes?page=${n}&sort=NEWEST&max_limit=${a}`);return sa(await l.json())}catch{return}}resolveTitleSlug(e){var t;if(!e)return;const a=e.split("/").filter(Boolean);return(t=a[1])!=null?t:a[0]}}pt.specId="tapas";function dt(r,e){const t=oa(e)>20;return re(te({},r),{chapters:t?[]:r.chapters,hasMoreChapters:t})}function sa(r){var e,t,a;const n=(e=r?.data)==null?void 0:e.episodes;if(!Array.isArray(n))return;const l=n.map(s=>{var c,o,u;return{chap:(c=s.pending_scene)!=null?c:s.scene,slug:s.id+"",ts:((u=(o=new Date(s.publish_date))==null?void 0:o.valueOf)==null?void 0:u.call(o))||void 0}}),i=(t=r?.data)==null?void 0:t.pagination;return{chapters:l,total:(a=i?.total)!=null?a:l.length,hasMore:!!(i!=null&&i.has_next)}}function oa(r){var e;const t=document.querySelector(r);return+(((e=t?.textContent)==null?void 0:e.trim().split(" ")[0])||0)}const ca=[De,Ie,Ee,ze,Ke,rt,st,pt,Je];function gt(r){var e;const t=(e=ca.find(a=>a.specId===r.spec.id))!=null?e:x;return new t(r)}var ua=Object.defineProperty,pa=Object.defineProperties,da=Object.getOwnPropertyDescriptors,ht=Object.getOwnPropertySymbols,ga=Object.prototype.hasOwnProperty,ha=Object.prototype.propertyIsEnumerable,ft=(r,e,t)=>e in r?ua(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,vt=(r,e)=>{for(var t in e||(e={}))ga.call(e,t)&&ft(r,t,e[t]);if(ht)for(var t of ht(e))ha.call(e,t)&&ft(r,t,e[t]);return r},mt=(r,e)=>pa(r,da(e));async function fa(r){var e,t;const{spec:a}=r;if(a){const n=(e=r.siteMeta)!=null?e:a.meta,l=r.type?[r.type]:yt(n,a.generic);if(!l.length)return;const i=gt(mt(vt({},r),{spec:a,siteMeta:n}));return await q(l.map(s=>i.getRawPageByType(s)))}return await q(((t=r.genericSpecs)!=null?t:[]).map(n=>{const l=yt(n.meta,n.generic);if(!l.length)return[];const i=gt(mt(vt({},r),{spec:n,siteMeta:n.meta}));return l.map(s=>i.getRawPageByType(s,!0))}).flat())}function yt(r,e){if(location.pathname==="/")return[];const{titleBase:t,readerBase:a}=r,n=location.pathname.split("/").filter(Boolean),l=wt(n,a),i=wt(n,t);if(l!==i)return l>i?[b.reader]:[b.title];if(l>0)return[b.reader,b.title];if(n.length===1){const s=[!a&&b.reader,!t&&b.title].filter(Boolean);if(s.length)return s}return e?[b.reader,b.title]:[]}function wt(r,e){if(!e)return 0;const t=e.split("/").filter(Boolean),a=t.includes("{slug}"),n=r.length-t.length;return a&&n!==0||!a&&n<1?0:t.filter((l,i)=>r[i]===l||l==="{titleSlug}"||l==="{lang}"||l==="{slug}").length}W.PageType=b,W.scrape=fa});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "trackkun-dom",
3
3
  "author": "endyquang",
4
- "version": "0.3.3",
4
+ "version": "0.3.5",
5
5
  "license": "UNLICENSED",
6
6
  "description": "Trkun DOM parser",
7
7
  "main": "index.js",
package/specs.json CHANGED
@@ -1 +1 @@
1
- [{"404":"#content > .wrapper > .notf img","id":"mangastream","generic":true,"name":"meta[itemprop=\"name\"]|attr:content","meta":{"releases":"","titleBase":"series","readerBase":"","searchBase":"?s=","idBase":"?p=","titleIdType":"id","defaultLang":"en"},"releases":{"title":{"sel":".listupd .utao .uta, .bixbox .bs.styletere","id":"a.series[rel]|attr:rel","name":"h4, .info .tt, .tt a|text","url":"a|attr:href","img":".imgu img, .limit img|attr-contain:src","chapter":{"sel":".luf ul li, .chapter-list > a, .chfiv > li","label":"a, .epxs|text","url":"a|attr:href || |attr:href","at":"a + span, .expdate, .newchtimeluffy|text"}}},"title":{"sel":"#chapterlist > ul","id":".bookmark[data-id]|attr:data-id || #rating-form input[name=\"bs_table_id\"]|attr:value","name":"h1.entry-title|text","img":".thumb img|attr-contain:src","type":".imptdt a[href*=\"type=\"]|text || .imptdt:first-of-type i|text","tags":".postbody .mgen > a|text","chapter":{"sel":"#chapterlist > ul > li","url":"a|attr:href","label":".chapternum|text","at":".chapterdate|text"}},"reader":{"sel":"#readerarea","id":".ctop option:selected|attr:data-id","label":"h1.entry-title|text","img":"#readerarea > p > img,#readerarea > img|attr-contain:src","title":{"sel":".headpost .allc","name":"a|text","url":"a|attr:href"},"prev":"a.ch-prev-btn:not(.disabled)|attr:href","next":"a.ch-next-btn:not(.disabled)|attr:href","chapter":{"sel":".ctop option:not([disabled]):not([value=\"\"])","id":"|attr:data-id","label":"|text","url":"|attr:value"}},"search":{"title":{"sel":".listupd .bsx","name":".bigor .tt|text","url":"a|attr:href","img":".limit img|attr-contain:src"}}},{"404":".error-404.not-found","id":"madara","generic":true,"name":"a.logo|attr:title || meta[property=\"og:site_name\"]|attr:content","meta":{"releases":"","titleBase":"manga","readerBase":"manga/{titleSlug}","idBase":"?p=","searchBase":"?post_type=wp-manga&s=","defaultLang":"en","titleIdType":"id"},"releases":{"title":{"sel":".page-listing-item .page-item-detail","id":"[data-post-id]|attr:data-post-id","name":"h3 a|text","url":"a|attr:href","img":"img|attr-contain:src","chapter":{"sel":".chapter-item","label":".chapter a|text","url":".chapter a|attr:href","at":".c-new-tag|attr:title || .post-on|text"}}},"title":{"lazy":true,"sel":".listing-chapters_wrap, #manga-chapters-holder","id":"#manga-chapters-holder|attr:data-id || .rating-post-id|attr:value","name":"h1|text","img":".summary_image .img-responsive|[attr:data-src,attr-contain:src]","tags":"a[rel=\"tag\"][href*=\"genre\"],a[rel=\"tag\"][href*=\"tag\"]|text","type":".post-content_item .summary-heading|row:type","chapter":{"sel":"li.wp-manga-chapter","url":"a|attr:href","label":"a|text","at":".c-new-tag|attr:title || .chapter-release-date i|text"}},"reader":{"sel":".entry-content .read-container","label":".breadcrumb li.active|text","img":".reading-content img|[attr:data-src,attr-contain:src]","title":{"sel":".breadcrumb li:nth-last-child(2) a","id":"#manga-reading-nav-head|attr:data-id","name":"|text","url":"|attr:href"},"prev":"a.btn.prev_page|attr:href","next":"a.btn.next_page|attr:href","chapter":{"sel":"#manga-reading-nav-head select.single-chapter-select > option:not([disabled])","label":"|text","url":"|attr:data-redirect"}},"search":{"title":{"sel":".c-tabs-item__content","name":"h3 a|text","url":"a|attr:href","img":".tab-thumb img|attr-contain:src","chapter":{"sel":".tab-meta","label":".chapter a|text","url":".chapter a|attr:href","at":".c-new-tag|attr:title || .post-on|text"}}}},{"404":".elapi > a[href*=\"/search?q=\"]","id":"mangahub","meta":{"releases":"","titleBase":"manga","readerBase":"chapter/{titleSlug}","searchBase":"search?q=","defaultLang":"en","titleIdType":"slug"},"releases":{"title":{"sel":".list-group-item .media","name":"h4.media-heading a|text","img":".media-left img|attr-contain:src","url":".media-heading a|attr:href","at":".media-heading .small|text","chapter":{"sel":".media-body > a","label":"|text","url":"|attr:href"}}},"title":{"sel":"#chapters-tab .tab-content","name":"#mangadetail h1|text","img":"#mangadetail img.manga-thumb|attr-contain:src","tags":"#mangadetail a.genre-label|text","chapter":{"sel":"#chapters-tab li.list-group-item","label":"a > span:first-child > span:first-child|text","url":"a|attr:href","at":"small|text"}},"reader":{"sel":"#mangareader","label":"h3|text","img":"#mangareader div img[alt]|attr-contain:src","prev":".chapter-pager .previous a[href*=\"/chapter/\"]|attr:href","next":".chapter-pager .next a[href*=\"/chapter/\"]|attr:href","title":{"sel":"h3 a","name":"|text","url":"|attr:href"},"chapter":{"sel":".pager-dropdown .dropdown-menu > li > a","label":"|text","url":"|attr:href"}},"search":{"title":{"sel":".media-manga","name":"h4 a|text","img":".media-left img|attr-contain:src","url":"h4 a|attr:href","chapter":{"sel":".media-body","label":"a[href*=\"/chapter/\"]|text","url":"a[href*=\"/chapter/\"]|attr:href"}}}},{"404":"#content > .wrapper > .notf img","id":"manhwafreak","meta":{"releases":"","titleBase":"manga","readerBase":"","searchBase":"?s=","idBase":"?p=","defaultLang":"en","titleIdType":"name"},"releases":{"title":{"sel":".lastest .lastest-serie","name":".lastest-title a|text","img":".img img|attr-contain:src","url":"a|attr:href","chapter":{"sel":".lastest-chap > a","label":"li|text","url":"|attr:href","at":"li span|text"}}},"title":{"sel":".series + .chapters .chapter-li","name":".series h1.title|text","img":".series .info img|attr-contain:src","tags":"#info > .left > div > p:first-child|row:genre(s)","type":"#info > .left > div > p:first-child|row:type","chapter":{"sel":".chapter-li > a","label":".chapter-info p|text","url":"|attr:href","at":".chapter-info p:nth-child(2)|text"}},"reader":{"sel":"#readerarea","label":"h2.entry-title|text","img":"#readerarea img.ts-main-image[data-index]|[attr:data-src,attr-contain:src]","prev":"a.ch-prev-btn:not(.disabled)|attr:href","next":"a.ch-next-btn:not(.disabled)|attr:href","title":{"sel":".breadcrumb > ul > li:nth-child(3) a","name":"span|text","url":"|attr:href"}},"search":{"title":{"sel":".listupd .lastest-serie","name":".lastest-title|text","url":"a|attr:href","img":"img.ts-post-image|attr-contain:src","chapter":{"sel":".lastest-chap > a","label":"li|text","url":"|attr:href","at":"li span|text"}}}},{"404":".error-404.not-found","id":"nettruyen","meta":{"releases":"","titleBase":"truyen-tranh","readerBase":"truyen-tranh/{titleSlug}","searchBase":"tim-truyen?keyword=","defaultLang":"vi","titleIdType":"id"},"releases":{"title":{"sel":".items > .row > .item","id":".comic-item|attr:data-id","name":"h3 a|text","img":".image img|attr-contain:src","url":"h3 a|attr:href","chapter":{"sel":".chapter","label":"a|text","url":"a|attr:href","at":".time|text"}}},"title":{"id":".rating .star[data-id],.follow-link[data-id]|attr:data-id","name":"#item-detail h1.title-detail|text","img":"#item-detail .detail-info img|attr-contain:src","tags":".kind a[href*=\"/tim-truyen/\"]|text","chapter":{"sel":"#nt_listchapter nav > ul > li.row","label":".chapter a|text","url":".chapter a|attr:href","at":".small|text"}},"reader":{"label":"a.itemcrumb.active > span[itemprop=\"name\"]|text","img":".reading-detail > .page-chapter > img,.reading-detail > img|[attr:data-original,attr-contain:src]","prev":"a.prev.a_prev:not(.disabled)|attr:href","next":"a.next.a_next:not(.disabled)|attr:href","title":{"sel":"h1.txt-primary a","id":".follow-link[data-id]|attr:data-id","name":"|text","url":"|attr:href"}},"search":{"title":{"sel":".items > .row > .item","name":"h3 a|text","img":".image img|attr-contain:src","url":"h3 a|attr:href"}}},{"id":"manga4life","meta":{"releases":"","titleBase":"manga","readerBase":"read-online","searchBase":"search/?name=","defaultLang":"en","titleIdType":"slug"},"releases":{"title":{"sel":".BoxBody.LatestChapters .Chapter","name":".Image > a|attr:title","img":".Image > a img|attr-contain:src","url":".Image > a|attr:href","chapter":{"sel":".Label > a","label":".ChapterLabel|text","url":"|attr:href","at":".DateLabel|text"}}},"title":{"name":".BoxBody h1|text","img":"meta[property=\"og:image\"],meta[property=\"twitter:image:src\"]|attr:content","tags":"a[href*=\"search/?genre=\"]|text","type":"a[href*=\"search/?type=\"]|text"},"reader":{"label":"button[data-target=\"#ChapterModal\"]|text","img":".ImageGallery img.img-fluid|attr:ng-src","title":{"sel":".DesktopNav a","name":"|text","url":"|attr:href"}},"search":{"title":{"sel":".SearchFilterNav + .row > div[ng-repeat^=\"Series\"]","name":"div:nth-child(2) a.SeriesName|text","img":"img|attr-contain:src","url":"a|attr:href"}}},{"id":"mangadex","meta":{"releases":"about:blank","titleBase":"title","readerBase":"chapter","searchBase":"titles?q=","defaultLang":"en","chapters":"about:blank","titleIdType":"slug"}},{"id":"comick","meta":{"home":"home","releases":"about:blank","titleBase":"comic","readerBase":"comic/{titleSlug}","searchBase":"search?q=","defaultLang":"en","chapters":"about:blank","titleIdType":"id"},"releases":{"title":{"sel":"#updates-container div[title]","name":"|attr:title","img":"img|attr-contain:src","url":"a[href^=\"/comic/\"]|attr:href","chapter":{"sel":"a:last-child","label":"div:first-child|text","url":"|attr:href","at":"div:nth-child(2)|text"}}},"title":{"name":"h1|text","img":"a[href$=\"/covers\"] > img|attr-contain:src","langs":"#chapter-header + div select option:not([value=\"\"]):not([value=\"all\"])|attr:value","tags":"table a.link[href^=\"/search?genres=\"]|text","type":"h1 ~ div.text-sm span:first-child|row:origination"},"reader":{"lazy":true,"sel":".reader-container","label":"select:first-of-type option[selected]|text","img":".reader-container img|attr-contain:src","title":{"sel":"div > a[href*=\"/comic/\"]","name":"|text || img[alt]|attr:alt","url":"|attr:href","img":"img|attr-contain:src"},"lang":"select:nth-child(2)|value","prev":".reader-container a:first-child[href^=\"/comic/\"]:not(:last-child)|attr:href","next":".reader-container a:last-child[href^=\"/comic/\"]|attr:href","chapter":{"sel":"select:first-of-type option:not([disabled]):not([value=\"\"])","label":"|text","url":"|attr:value"}}},{"id":"bato","meta":{"releases":"","titleBase":"series","readerBase":"chapter","searchBase":"search?word=","defaultLang":"en","titleIdType":"slug"},"releases":{"title":{"sel":"#series-list > .item","name":"a.item-title|text","img":".item-cover img|attr-contain:src","url":"a.item-title|attr:href","lang":"em[data-lang]|attr:data-lang","chapter":{"sel":".item-volch","label":"a|text","url":"a|attr:href","at":"i|text"}}},"title":{"name":"h3.item-title a|text","img":".attr-cover > img|attr-contain:src","langs":".title-set em[data-lang]|attr:data-lang","tags":".attr-main .attr-item .text-muted|row:genres","chapter":{"sel":".episode-list > .main > .item","label":"a.chapt > b|text","url":"a.chapt|attr:href","at":".extra > i|text"}},"reader":{"label":"title|text","img":"img.page-img|attr-contain:src","title":{"sel":"h3.nav-title a","name":"|text","url":"|attr:href"},"lang":"h3.nav-title em[data-lang]|attr:data-lang","prev":".nav-prev > a[href^=\"/chapter/\"]|attr:href","next":".nav-next > a[href^=\"/chapter/\"]|attr:href","chapter":{"sel":".nav-epis > select option:not([disabled]):not([value=\"\"])","label":"|text","url":"|attr:value"}}},{"404":"#error > .attention","id":"mangago","meta":{"releases":"list/latest","titleBase":"read-manga","readerBase":"read-manga/{titleSlug}","searchBase":"r/l_search/?name=","defaultLang":"en","titleIdType":"slug"},"releases":{"title":{"sel":"ul#search_list > li > div","name":"a.thm-effect|attr:title","img":"a.thm-effect img|attr-contain:src","url":"a.thm-effect|attr:href","chapter":{"sel":"a.chico","label":"|text","url":"|attr:href"}}},"title":{"name":".w-title h1|text","img":".article .cover img,#information img|attr-contain:src","tags":".manga_right a[href*=\"/genre/\"],.manga_info ul.uk-list a[href*=\"/genre/\"]|text","chapter":{"sel":"#chapter_table tbody tr, table.uk-table tbody tr","label":"h4 a b, a.chico|text","url":"h4 a, a.chico|attr:href","at":"td:last-child|text"}},"reader":{"label":"#navi h3 span:last-child,#series + a.chapter|text","img":"#pic_container img[id^=\"page\"]|attr-contain:src","title":{"sel":"#navi a#series,#reader-nav .nav li:first-child a","name":"|text","url":"|attr:href"},"chapter":{"sel":".pagebar.top ul.dropdown-menu.chapter > li > a,#series ~ ul.chapter li a","label":"|text","url":"|attr:href"}},"search":{"title":{"sel":"#search_list > li .box","name":"a.thm-effect|attr:title","img":"a.thm-effect img|attr-contain:src","url":"a.thm-effect|attr:href","chapter":{"sel":"a.chico","label":"|text","url":"|attr:href"}}}},{"404":".nf-large + .nf-desc + a[href=\"/home\"]","id":"kakalot","meta":{"home":"home","releases":"home","titleBase":"","readerBase":"read/{titleSlug}/{lang}","searchBase":"search?keyword=","defaultLang":"en","titleIdType":"id"},"releases":{"title":{"sel":"#latest-chap .inner > .item","id":".item-info h3|attr:data-id","name":".item-info h3 a|text","img":".item-poster img|attr-contain:src","url":"a|attr:href","chapter":{"sel":".chapter-list > .cl-item","label":"a.chapter-name|text","url":"a|attr:href","at":".time|text"}}},"title":{"lazy":true,"sel":"#chapt-list .cl-header","id":"#main|attr:data-id","name":".detail-box h3.manga-name|text","img":".detail-box .manga-poster-img|attr-contain:src","tags":".detail-box .line-content a[href*=\"/genre/\"]|text","langs":"#chap-lang .lang-item|attr:data-code","chapter":{"sel":"#chapt-list .reading-list > .item","label":"a.chapter-name|text","url":"a.chapter-name|attr:href","at":".item-time|text"}},"reader":{"label":".breadcrumb-item.active|text","img":"#list-image .card-wrap[data-url]|attr:data-url","title":{"sel":".breadcrumb-item:nth-child(2) a","id":"#reading|attr:data-manga-id","name":"|text","url":"|attr:href"},"chapter":{"sel":".kbreadcrumb + .reading-option option.reading-item","label":"|text","url":"|attr:value"}},"search":{"title":{"sel":".manga-list > .inner > .item","name":".manga-name a|attr:title","img":".manga-poster img|attr-contain:src","url":".manga-name a|attr:href","chapter":{"sel":".latest-chapter .chapter-name","label":"|text","url":"|attr:href"}}}},{"id":"reaper","meta":{"releases":"latest/comics","titleBase":"comics","readerBase":"comics/{titleSlug}/chapters","searchBase":"?s=","defaultLang":"en","titleIdType":"name"},"releases":{"title":{"sel":"main h2 + div .grid.grid-cols-1 > div","img":"a img|attr-contain:src","name":"p a|text","url":"a|attr:href","chapter":{"sel":"p + div > a","label":"|text","url":"|attr:href","at":"p|text"}}},"title":{"sel":"div > ul[role=\"list\"]:first-child","name":"h1|text","img":"main .container img[alt]|attr-contain:src","chapter":{"sel":"div > ul[role=\"list\"]:first-child li[wire\\:key^=\"comic-chapter-list\"] a","label":"p|text","url":"|attr:href","at":"div:last-child > p|text"}},"reader":{"label":"title|text","img":"main nav ~ img.max-w-full|attr-contain:src","prev":"main nav:first-of-type > div:first-child a|attr:href","next":"main nav:first-of-type > div:last-child a:last-child:not(:first-child)|attr:href","title":{"sel":"body","name":"main p|text","url":"main nav:first-of-type > div:last-child a:first-child|attr:href"}}},{"id":"tapas","meta":{"titleBase":"series/{slug}/info","readerBase":"episode","defaultLang":"en","titleIdType":"id","chapters":"about:blank"},"title":{"id":".button--subscribe|attr:data-tiara-event-meta-series-id","name":".info .title|text","img":".thumb img|attr:src","chapter":{"sel":".episode-list .episode-list__item > a","url":"|attr:data-id","label":"|attr:data-scene-number"}},"reader":{"id":"div[id^=\"episode-\"][data-ep-id]|attr:data-ep-id","label":"div[id^=\"episode-\"][data-ep-scene]|attr:data-ep-scene","img":".viewer__body img|[attr:data-src,attr-contain:src]","prev":"div[data-prev-id]:not([data-prev-id=\"-1\"])|attr:data-prev-id","next":"div[data-next-id]:not([data-next-id=\"-1\"])|attr:data-next-id","title":{"sel":"body","id":".subscribe-btn|attr:data-id","url":".subscribe-btn|attr:data-id","name":".series-info .title|text","img":".series-info .thumb img|attr:src"},"chapter":{"sel":".episode-list .list-body > li[data-id]","url":"|attr:data-id","label":".info__label|text"}}}]
1
+ [{"404":"#content > .wrapper > .notf img","id":"mangastream","generic":true,"name":"meta[itemprop=\"name\"]|attr:content","meta":{"releases":"","titleBase":"series","readerBase":"","searchBase":"?s=","idBase":"?p=","titleIdType":"id","defaultLang":"en"},"releases":{"title":{"sel":".listupd .utao .uta, .bixbox .bs.styletere","id":"a.series[rel]|attr:rel","name":"h4, .info .tt, .tt a|text","url":"a|attr:href","img":".imgu img, .limit img|attr-contain:src","chapter":{"sel":".luf ul li, .chapter-list > a, .chfiv > li","label":"a, .epxs|text","url":"a|attr:href || |attr:href","at":"a + span, .expdate, .newchtimeluffy|text"}}},"title":{"sel":"#chapterlist > ul","id":".bookmark[data-id]|attr:data-id || #rating-form input[name=\"bs_table_id\"]|attr:value","name":"h1.entry-title|text","img":".thumb img|attr-contain:src","type":".imptdt a[href*=\"type=\"]|text || .imptdt:first-of-type i|text","tags":".postbody .mgen > a|text","chapter":{"sel":"#chapterlist > ul > li","url":"a|attr:href","label":".chapternum|text","at":".chapterdate|text"}},"reader":{"sel":"#readerarea","id":".ctop option:selected|attr:data-id","label":"h1.entry-title|text","img":"#readerarea > p > img,#readerarea > img|attr-contain:src","title":{"sel":".headpost .allc","name":"a|text","url":"a|attr:href"},"prev":"a.ch-prev-btn:not(.disabled)|attr:href","next":"a.ch-next-btn:not(.disabled)|attr:href","chapter":{"sel":".ctop #chapter option:not([disabled]):not([value=\"\"])","id":"|attr:data-id","label":"|text","url":"|attr:value"}},"search":{"title":{"sel":".listupd .bsx","name":".bigor .tt|text","url":"a|attr:href","img":".limit img|attr-contain:src"}}},{"404":".error-404.not-found","id":"madara","generic":true,"name":"a.logo|attr:title || meta[property=\"og:site_name\"]|attr:content","meta":{"releases":"","titleBase":"manga","readerBase":"manga/{titleSlug}","idBase":"?p=","searchBase":"?post_type=wp-manga&s=","defaultLang":"en","titleIdType":"id"},"releases":{"title":{"sel":".page-listing-item .page-item-detail","id":"[data-post-id]|attr:data-post-id","name":"h3 a|text","url":"a|attr:href","img":"img|attr-contain:src","chapter":{"sel":".chapter-item","label":".chapter a|text","url":".chapter a|attr:href","at":".c-new-tag|attr:title || .post-on|text"}}},"title":{"lazy":true,"sel":".listing-chapters_wrap, #manga-chapters-holder","id":"#manga-chapters-holder|attr:data-id || .rating-post-id|attr:value","name":"h1|text","img":".summary_image .img-responsive|[attr:data-src,attr-contain:src]","tags":"a[rel=\"tag\"][href*=\"genre\"],a[rel=\"tag\"][href*=\"tag\"]|text","type":".post-content_item .summary-heading|row:type","chapter":{"sel":"li.wp-manga-chapter","url":"a|attr:href","label":"a|text","at":".c-new-tag|attr:title || .chapter-release-date i|text"}},"reader":{"sel":".entry-content .read-container","label":".breadcrumb li.active|text","img":".reading-content img|[attr:data-src,attr-contain:src]","title":{"sel":".breadcrumb li:nth-last-child(2) a","id":"#manga-reading-nav-head|attr:data-id","name":"|text","url":"|attr:href"},"prev":"a.btn.prev_page|attr:href","next":"a.btn.next_page|attr:href","chapter":{"sel":"#manga-reading-nav-head select.single-chapter-select > option:not([disabled])","label":"|text","url":"|attr:data-redirect"}},"search":{"title":{"sel":".c-tabs-item__content","name":"h3 a|text","url":"a|attr:href","img":".tab-thumb img|attr-contain:src","chapter":{"sel":".tab-meta","label":".chapter a|text","url":".chapter a|attr:href","at":".c-new-tag|attr:title || .post-on|text"}}}},{"404":".elapi > a[href*=\"/search?q=\"]","id":"mangahub","meta":{"releases":"","titleBase":"manga","readerBase":"chapter/{titleSlug}","searchBase":"search?q=","defaultLang":"en","titleIdType":"slug"},"releases":{"title":{"sel":".list-group-item .media","name":"h4.media-heading a|text","img":".media-left img|attr-contain:src","url":".media-heading a|attr:href","at":".media-heading .small|text","chapter":{"sel":".media-body > a","label":"|text","url":"|attr:href"}}},"title":{"sel":"#chapters-tab .tab-content","name":"#mangadetail h1|text","img":"#mangadetail img.manga-thumb|attr-contain:src","tags":"#mangadetail a.genre-label|text","chapter":{"sel":"#chapters-tab li.list-group-item","label":"a:not([rel]) > span:first-child > span:first-child,a > span:first-child > span:first-child|text","url":"a|attr:href","at":"small|text"}},"reader":{"sel":"#mangareader","label":"h3|text","img":"#mangareader div img[alt]|attr-contain:src","prev":".chapter-pager .previous a[href*=\"/chapter/\"]|attr:href","next":".chapter-pager .next a[href*=\"/chapter/\"]|attr:href","title":{"sel":"h3 a","name":"|text","url":"|attr:href"},"chapter":{"sel":".pager-dropdown .dropdown-menu > li > a","label":"|text","url":"|attr:href"}},"search":{"title":{"sel":".media-manga","name":"h4 a|text","img":".media-left img|attr-contain:src","url":"h4 a|attr:href","chapter":{"sel":".media-body","label":"a[href*=\"/chapter/\"]|text","url":"a[href*=\"/chapter/\"]|attr:href"}}}},{"404":"#content > .wrapper > .notf img","id":"manhwafreak","meta":{"releases":"","titleBase":"manga","readerBase":"","searchBase":"?s=","idBase":"?p=","defaultLang":"en","titleIdType":"name"},"releases":{"title":{"sel":".lastest .lastest-serie","name":".lastest-title a|text","img":".img img|attr-contain:src","url":"a|attr:href","chapter":{"sel":".lastest-chap > a","label":"li|text","url":"|attr:href","at":"li span|text"}}},"title":{"sel":".series + .chapters .chapter-li","name":".series h1.title|text","img":".series .info img|attr-contain:src","tags":"#info > .left > div > p:first-child|row:genre(s)","type":"#info > .left > div > p:first-child|row:type","chapter":{"sel":".chapter-li > a","label":".chapter-info p|text","url":"|attr:href","at":".chapter-info p:nth-child(2)|text"}},"reader":{"sel":"#readerarea","label":"h2.entry-title|text","img":"#readerarea img.ts-main-image[data-index]|[attr:data-src,attr-contain:src]","prev":"a.ch-prev-btn:not(.disabled)|attr:href","next":"a.ch-next-btn:not(.disabled)|attr:href","title":{"sel":".breadcrumb > ul > li:nth-child(3) a","name":"span|text","url":"|attr:href"}},"search":{"title":{"sel":".listupd .lastest-serie","name":".lastest-title|text","url":"a|attr:href","img":"img.ts-post-image|attr-contain:src","chapter":{"sel":".lastest-chap > a","label":"li|text","url":"|attr:href","at":"li span|text"}}}},{"404":".error-404.not-found","id":"nettruyen","meta":{"releases":"","titleBase":"truyen-tranh","readerBase":"truyen-tranh/{titleSlug}","searchBase":"tim-truyen?keyword=","defaultLang":"vi","titleIdType":"id"},"releases":{"title":{"sel":".items > .row > .item","id":".comic-item|attr:data-id","name":"h3 a|text","img":".image img|attr-contain:src","url":"h3 a|attr:href","chapter":{"sel":".chapter","label":"a|text","url":"a|attr:href","at":".time|text"}}},"title":{"id":".rating .star[data-id],.follow-link[data-id]|attr:data-id","name":"#item-detail h1.title-detail|text","img":"#item-detail .detail-info img|attr-contain:src","tags":".kind a[href*=\"/tim-truyen/\"]|text","chapter":{"sel":"#nt_listchapter nav > ul > li.row","label":".chapter a|text","url":".chapter a|attr:href","at":".small|text"}},"reader":{"label":"a.itemcrumb.active > span[itemprop=\"name\"]|text","img":".reading-detail > .page-chapter > img,.reading-detail > img|[attr:data-original,attr-contain:src]","prev":"a.prev.a_prev:not(.disabled)|attr:href","next":"a.next.a_next:not(.disabled)|attr:href","title":{"sel":"h1.txt-primary a","id":".follow-link[data-id]|attr:data-id","name":"|text","url":"|attr:href"}},"search":{"title":{"sel":".items > .row > .item","name":"h3 a|text","img":".image img|attr-contain:src","url":"h3 a|attr:href"}}},{"id":"manga4life","meta":{"releases":"","titleBase":"manga","readerBase":"read-online","searchBase":"search/?name=","defaultLang":"en","titleIdType":"slug"},"releases":{"title":{"sel":".BoxBody.LatestChapters .Chapter","name":".Image > a|attr:title","img":".Image > a img|attr-contain:src","url":".Image > a|attr:href","chapter":{"sel":".Label > a","label":".ChapterLabel|text","url":"|attr:href","at":".DateLabel|text"}}},"title":{"name":".BoxBody h1|text","img":"meta[property=\"og:image\"],meta[property=\"twitter:image:src\"]|attr:content","tags":"a[href*=\"search/?genre=\"]|text","type":"a[href*=\"search/?type=\"]|text"},"reader":{"label":"button[data-target=\"#ChapterModal\"]|text","img":".ImageGallery img.img-fluid|attr:ng-src","title":{"sel":".DesktopNav a","name":"|text","url":"|attr:href"}},"search":{"title":{"sel":".SearchFilterNav + .row > div[ng-repeat^=\"Series\"]","name":"div:nth-child(2) a.SeriesName|text","img":"img|attr-contain:src","url":"a|attr:href"}}},{"id":"mangadex","meta":{"releases":"about:blank","titleBase":"title","readerBase":"chapter","searchBase":"titles?q=","defaultLang":"en","chapters":"about:blank","titleIdType":"slug"}},{"id":"comick","meta":{"home":"home","releases":"about:blank","titleBase":"comic","readerBase":"comic/{titleSlug}","searchBase":"search?q=","defaultLang":"en","chapters":"about:blank","titleIdType":"id"},"releases":{"title":{"sel":"#updates-container div[title]","name":"|attr:title","img":"img|attr-contain:src","url":"a[href^=\"/comic/\"]|attr:href","chapter":{"sel":"a:last-child","label":"div:first-child|text","url":"|attr:href","at":"div:nth-child(2)|text"}}},"title":{"name":"h1|text","img":"a[href$=\"/covers\"] > img|attr-contain:src","langs":"#chapter-header + div select option:not([value=\"\"]):not([value=\"all\"])|attr:value","tags":"table a.link[href^=\"/search?genres=\"]|text","type":"h1 ~ div.text-sm span:first-child|row:origination"},"reader":{"lazy":true,"sel":".reader-container","label":"select:first-of-type option[selected]|text","img":".reader-container img|attr-contain:src","title":{"sel":"div > a[href*=\"/comic/\"]","name":"|text || img[alt]|attr:alt","url":"|attr:href","img":"img|attr-contain:src"},"lang":"select:nth-child(2)|value","prev":".reader-container a:first-child[href^=\"/comic/\"]:not(:last-child)|attr:href","next":".reader-container a:last-child[href^=\"/comic/\"]|attr:href","chapter":{"sel":"select:first-of-type option:not([disabled]):not([value=\"\"])","label":"|text","url":"|attr:value"}}},{"id":"bato","meta":{"releases":"","titleBase":"series","readerBase":"chapter","searchBase":"search?word=","defaultLang":"en","titleIdType":"slug"},"releases":{"title":{"sel":"#series-list > .item","name":"a.item-title|text","img":".item-cover img|attr-contain:src","url":"a.item-title|attr:href","lang":"em[data-lang]|attr:data-lang","chapter":{"sel":".item-volch","label":"a|text","url":"a|attr:href","at":"i|text"}}},"title":{"name":"h3.item-title a|text","img":".attr-cover > img|attr-contain:src","langs":".title-set em[data-lang]|attr:data-lang","tags":".attr-main .attr-item .text-muted|row:genres","chapter":{"sel":".episode-list > .main > .item","label":"a.chapt > b|text","url":"a.chapt|attr:href","at":".extra > i|text"}},"reader":{"label":"title|text","img":"img.page-img|attr-contain:src","title":{"sel":"h3.nav-title a","name":"|text","url":"|attr:href"},"lang":"h3.nav-title em[data-lang]|attr:data-lang","prev":".nav-prev > a[href^=\"/chapter/\"]|attr:href","next":".nav-next > a[href^=\"/chapter/\"]|attr:href","chapter":{"sel":".nav-epis > select option:not([disabled]):not([value=\"\"])","label":"|text","url":"|attr:value"}}},{"404":"#error > .attention","id":"mangago","meta":{"releases":"list/latest","titleBase":"read-manga","readerBase":"read-manga/{titleSlug}","searchBase":"r/l_search/?name=","defaultLang":"en","titleIdType":"slug"},"releases":{"title":{"sel":"ul#search_list > li > div","name":"a.thm-effect|attr:title","img":"a.thm-effect img|attr-contain:src","url":"a.thm-effect|attr:href","chapter":{"sel":"a.chico","label":"|text","url":"|attr:href"}}},"title":{"name":".w-title h1|text","img":".article .cover img,#information img|attr-contain:src","tags":".manga_right a[href*=\"/genre/\"],.manga_info ul.uk-list a[href*=\"/genre/\"]|text","chapter":{"sel":"#chapter_table tbody tr, table.uk-table tbody tr","label":"h4 a b, a.chico|text","url":"h4 a, a.chico|attr:href","at":"td:last-child|text"}},"reader":{"label":"#navi h3 span:last-child,#series + a.chapter|text","img":"#pic_container img[id^=\"page\"]|attr-contain:src","title":{"sel":"#navi a#series,#reader-nav .nav li:first-child a","name":"|text","url":"|attr:href"},"chapter":{"sel":".pagebar.top ul.dropdown-menu.chapter > li > a,#series ~ ul.chapter li a","label":"|text","url":"|attr:href"}},"search":{"title":{"sel":"#search_list > li .box","name":"a.thm-effect|attr:title","img":"a.thm-effect img|attr-contain:src","url":"a.thm-effect|attr:href","chapter":{"sel":"a.chico","label":"|text","url":"|attr:href"}}}},{"404":".nf-large + .nf-desc + a[href=\"/home\"]","id":"kakalot","meta":{"home":"home","releases":"home","titleBase":"","readerBase":"read/{titleSlug}/{lang}","searchBase":"search?keyword=","defaultLang":"en","titleIdType":"id"},"releases":{"title":{"sel":"#latest-chap .inner > .item","id":".item-info h3|attr:data-id","name":".item-info h3 a|text","img":".item-poster img|attr-contain:src","url":"a|attr:href","chapter":{"sel":".chapter-list > .cl-item","label":"a.chapter-name|text","url":"a|attr:href","at":".time|text"}}},"title":{"lazy":true,"sel":"#chapt-list .cl-header","id":"#main|attr:data-id","name":".detail-box h3.manga-name|text","img":".detail-box .manga-poster-img|attr-contain:src","tags":".detail-box .line-content a[href*=\"/genre/\"]|text","langs":"#chap-lang .lang-item|attr:data-code","chapter":{"sel":"#chapt-list .reading-list > .item","label":"a.chapter-name|text","url":"a.chapter-name|attr:href","at":".item-time|text"}},"reader":{"label":".breadcrumb-item.active|text","img":"#list-image .card-wrap[data-url]|attr:data-url","title":{"sel":".breadcrumb-item:nth-child(2) a","id":"#reading|attr:data-manga-id","name":"|text","url":"|attr:href"},"chapter":{"sel":".kbreadcrumb + .reading-option option.reading-item","label":"|text","url":"|attr:value"}},"search":{"title":{"sel":".manga-list > .inner > .item","name":".manga-name a|attr:title","img":".manga-poster img|attr-contain:src","url":".manga-name a|attr:href","chapter":{"sel":".latest-chapter .chapter-name","label":"|text","url":"|attr:href"}}}},{"id":"reaper","meta":{"releases":"latest/comics","titleBase":"comics","readerBase":"comics/{titleSlug}/chapters","searchBase":"?s=","defaultLang":"en","titleIdType":"name"},"releases":{"title":{"sel":"main h2 + div .grid.grid-cols-1 > div","img":"a img|attr-contain:src","name":"p a|text","url":"a|attr:href","chapter":{"sel":"p + div > a","label":"|text","url":"|attr:href","at":"p|text"}}},"title":{"sel":"div > ul[role=\"list\"]:first-child","name":"h1|text","img":"main .container img[alt]|attr-contain:src","chapter":{"sel":"div > ul[role=\"list\"]:first-child li[wire\\:key^=\"comic-chapter-list\"] a","label":"p|text","url":"|attr:href","at":"div:last-child > p|text"}},"reader":{"label":"title|text","img":"main nav ~ img.max-w-full|attr-contain:src","prev":"main nav:first-of-type > div:first-child a|attr:href","next":"main nav:first-of-type > div:last-child a:last-child:not(:first-child)|attr:href","title":{"sel":"body","name":"main p|text","url":"main nav:first-of-type > div:last-child a:first-child|attr:href"}}},{"id":"tapas","meta":{"titleBase":"series/{slug}/info","readerBase":"episode","defaultLang":"en","titleIdType":"id","chapters":"about:blank"},"title":{"id":".button--subscribe|attr:data-tiara-event-meta-series-id","name":".info .title|text","img":".thumb img|attr:src","chapter":{"sel":".episode-list .episode-list__item > a","url":"|attr:data-id","label":"|attr:data-scene-number"}},"reader":{"id":"div[id^=\"episode-\"][data-ep-id]|attr:data-ep-id","label":"div[id^=\"episode-\"][data-ep-scene]|attr:data-ep-scene","img":".viewer__body img|[attr:data-src,attr-contain:src]","prev":"div[data-prev-id]:not([data-prev-id=\"-1\"])|attr:data-prev-id","next":"div[data-next-id]:not([data-next-id=\"-1\"])|attr:data-next-id","title":{"sel":"body","id":".subscribe-btn|attr:data-id","url":".subscribe-btn|attr:data-id","name":".series-info .title|text","img":".series-info .thumb img|attr:src"},"chapter":{"sel":".episode-list .list-body > li[data-id]","url":"|attr:data-id","label":".info__label|text"}}}]