trackkun-dom 2.7.1 → 2.7.2

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 (2) hide show
  1. package/index.js +1 -1
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -1 +1 @@
1
- (function(j,L){typeof exports=="object"&&typeof module<"u"?L(exports):typeof define=="function"&&define.amd?define(["exports"],L):(j=typeof globalThis<"u"?globalThis:j||self,L(j._trackkun_={}))})(this,function(j){"use strict";function L(a){let t=!1;return new Promise((e,r)=>{Promise.all(a.map(async n=>{const s=await n;!t&&s&&(t=!0,e(s))})).then(()=>{t||e(void 0)})})}const Bt=/(vol(ume)?|season)(\s*|-|\.)(\d+)/i,jt=/^S([1-9])\s/i,Lt=/(ch(ap(t(er)?|\.)?|\.)?|#|episode\.?|capitolo\.?|capitulo\.?|bölüm\.?)(\s*|-)(\d+([_-~,.]\d+)?)/i,Ot=/\d+([_-~,.]\d+)?/,Nt=/[_-~,]/;function _t(a){const t=a.match(Bt);if(t)return{volStr:t[0],volValueStr:t[4]};const e=a.match(jt);return e?{volStr:e[0],volValueStr:e[1]}:{}}function O(a){if(!a)return;if(!isNaN(+a))return{chap:+a};const{volStr:t,volValueStr:e}=_t(a),r=t?a.replace(t,"").trim():a,n=r.match(Lt),s=r.match(Ot),o=n?.[6],l=o??s?.[0];if(!l)return;const i=+l.replace(Nt,".");return isNaN(i)?void 0:{vol:t&&e&&!isNaN(+e)&&a.indexOf(t)<a.indexOf(o?n[0]:s[0])?+e:void 0,chap:i}}function At(){return Math.random().toString(16).slice(2)}async function zt({addListener:a,removeListener:t,transform:e,filter:r,handler:n,onTimeout:s,timeout:o,once:l}){return new Promise(i=>{a(g);const c=()=>l===!0&&t(g),u=o?setTimeout(()=>{c(),i(void 0),s?.()},o):void 0;async function g(p,...h){p=e?e(p):p,p!==void 0&&(!r||r(p,...h))&&(c(),i(p),n?.(p,...h),u&&clearTimeout(u))}})}async function kt(a){return(await zt({addListener:t=>window.addEventListener("message",t),removeListener:t=>window.removeEventListener("message",t),...a}))?.data}async function Wt(a){const{receiverWindow:t,timeout:e,targetOrigin:r,event:n,args:s}=a,o={reqId:At(),event:n,args:s};return(t||window)?.postMessage(o,r??"*"),(await kt({filter:l=>l?.data?.resId===o.reqId,timeout:e??3e4,once:!0}))?.result}const M={isAny:!0};function I(a,...t){return Wt({event:"tk:fetchResult",args:{baseUrl:a,segments:t}})}function N(a,t){a.sort((i,c)=>i.vol===void 0||c.vol===void 0?c.chap-i.chap:c.vol-i.vol||c.chap-i.chap);const e={},r={};for(let i=a.length-1;i>=0;i--){const c=a[i],u=c.group??"";e[u]=(e[u]??0)+1;const g=c.lang??"";c.vol!==void 0?r[g]=c.vol:r[g]!==void 0&&(c.inferVol=r[g])}const n=[],s={},o=t?.preferGroup,l=o?i=>i.lang??"":i=>[i.lang,i.group].filter(Boolean).join(":");for(const i of a){const c=l(i),u=s[c],g=n[u];if(!(g&&g.chap===i.chap&&(g.vol===i.vol||g.vol===void 0||i.vol===void 0))){s[c]=n.length,n.push(i);continue}if(!o){g.vol===void 0&&i.vol!=null&&(n[u]=i);continue}g.group!==o&&(i.group==o||g.group&&!i.group||e[i.group??""]>e[g.group??""])&&(n[u]=i)}return n}async function D(a,t,e){const r=await e(()=>{a=0});if(r!==void 0)return r;if(!(a<=0))return await new Promise(n=>{setTimeout(async()=>{const s=await D(a-1,t,e);n(s)},t)})}async function P(a,t,e=0){const r=t.root??document.documentElement,n=t.timeoutMs??1e4;return D(t.lazy===!0?n/50:0,50,()=>{const s=t.all===!0?Array.from(r.querySelectorAll(a)):r.querySelector(a)??void 0;return(t.all?!s?.length:!s)?void 0:s})}const G={text:Vt,attr:Ht,"attr-contain":Jt,value:Qt,row:Yt,"bg-image":Gt},Et={pattern:Zt,remove:Kt};function d(a,t){if(a)return Z(a,t,qt)}function _(a,t){if(a)return Z(a,t,Ft)}function Z(a,t,e){if(!a)return;const r=a.split("||").map(n=>n.trim()).filter(n=>!!n&&n.includes("|"));for(const n of r){const s=Ut(n);if(!s)continue;const o=e(t??document.documentElement,s);if(o)return o}}function Ut(a){const[t,e,...r]=a.split("|");if(!e)return;const n=e?.startsWith("[")&&e.endsWith("]")?e.substring(1,e.length-1).split(","):[e];return{selector:t||void 0,extractors:n.map(K),transformers:r.map(K)}}function K(a){const t=a.indexOf(":"),e=t!==-1;return{fn:e?a.substring(0,t):a,param:e?a.substring(t+1):""}}function qt(a,t){if(!t.selector)return X(a,t);const e=t.selector.split(",");for(const r of e){const n=Array.from(a.querySelectorAll(r));for(const s of n){const o=X(s,t);if(o)return o}}}function Ft(a,t){const e=t.selector?Array.from(a.querySelectorAll(t.selector)):[a],r=[];for(const n of e)for(const s of t.extractors){const o=G[s.fn],l=o(n,s.param);if(l){r.push(tt(l,t.transformers));break}}if(r.length)return r}function X(a,t){for(const e of t.extractors){const r=G[e.fn],n=r(a,e.param);if(n)return tt(n,t.transformers)}}function tt(a,t){let e=a;for(const r of t){const n=Et[r.fn];n&&(e=n(e,r.param).trim())}return e}function Vt(a){return Array.from(a.childNodes).filter(t=>t.nodeType===3).map(t=>A(t.textContent)).filter(Boolean).join(" ").trim()||A(a.textContent)}function Ht(a,t){return A(a.getAttribute(t))}function Jt(a,t){let e=a.getAttribute(t);if(!e){const r=a.getAttributeNames().find(n=>n.includes(t));r&&(e=a.getAttribute(r))}return A(e)}function Qt(a){return a.value}function Yt(a,t){if(!t)return;const e=A(a.textContent)?.toLowerCase(),r=t.toLowerCase();if(!(e!==r&&e!==`${r}:`))return A(a.nextElementSibling?.textContent??a.nextSibling?.textContent)}function Gt(a){const t=getComputedStyle(a).backgroundImage;if(!(!t||!t.startsWith("url(")))return t.slice(5,-2)||void 0}function A(a){if(a)return a?.replace(/(\n|\t)/g," ").trim()||void 0}function Zt(a,t){if(t)try{return a.replace(new RegExp(t,"i"),"$1")}catch{}return a}function Kt(a,t){if(t)try{return a.replaceAll(new RegExp(t,"gi"),"")}catch{}return a}var Xt=(a=>(a[a.reading=1]="reading",a[a.paused=2]="paused",a[a.plan=3]="plan",a[a.completed=4]="completed",a[a.dropped=5]="dropped",a[a.deleted=6]="deleted",a))(Xt||{}),te=(a=>(a[a.ok=1]="ok",a[a.hidden=2]="hidden",a[a.deleted=3]="deleted",a))(te||{}),ee=(a=>(a[a.aggregator=0]="aggregator",a[a.scanlator=1]="scanlator",a))(ee||{}),ae=(a=>(a[a.pending=0]="pending",a[a.completed=1]="completed",a[a.offline=2]="offline",a[a.incompat=3]="incompat",a))(ae||{}),U=(a=>(a.id="id",a.name="name",a.slug="slug",a))(U||{}),W=(a=>(a.blank="about:blank",a.title="meta.title",a.reader="meta.reader",a))(W||{});function et(a=0){return new Promise(t=>setTimeout(t,a))}async function at(a,t=240){return new Promise(e=>{const r=new Image;r.crossOrigin="anonymous",r.onerror=()=>e(void 0),r.onload=()=>{const n=document.createElement("canvas"),s=n.getContext("2d"),o=Math.max(1,r.naturalWidth/t),l=r.naturalWidth/o,i=r.naturalHeight/o;n.width=l,n.height=i;const c=/iPad|iPhone|iPod/.test(navigator.userAgent);try{s.drawImage(r,0,0,l,i);const u=n.toDataURL(c?"image/jpg":"image/webp",c?.99:.8).split(",").slice(-1)[0];e(u)}catch{e(void 0)}},r.src=a})}async function re(a,t=240){const e=await ne(a);if(e)return await new Promise(async r=>{const n=at(e,t),s=setTimeout(()=>r(void 0),100),o=await n;clearTimeout(s),r(o)})}async function ne(a){try{const t=await fetch(a);if(t.status>=400)return;const e=await t.blob();return URL.createObjectURL(e)}catch{return}}const se=[{seconds:1,locales:{en:"sec",vi:"gi\xE2y",tr:"ikinci",es:"segunda"}},{seconds:60,locales:{en:"min",vi:"ph\xFAt",tr:"dakika"}},{seconds:3600,locales:{en:"hour",vi:"gi\u1EDD",tr:"saat",fr:"heure",it:"ora",es:"hora"}},{seconds:86400,locales:{en:"day",vi:"ng\xE0y",tr:"g\xFCn",fr:"jour",it:"giorno",es:"d\xEDa"}},{seconds:604800,locales:{en:"week",vi:"tu\u1EA7n",tr:"hafta",fr:"semaine",it:"settimana",es:"semana"}},{seconds:2592e3,locales:{en:"month",vi:"th\xE1ng",tr:"ay",fr:"mois",it:"mese",es:"mes"}},{seconds:31536e3,locales:{en:"year",vi:"n\u0103m",tr:"yil",fr:"an",it:"anno",es:"a\xF1o"}}];function rt(a,t){const e=a?.toLowerCase();if(!e)return;const r=Date.now();if(e.includes("now"))return r;if(e.includes("yesterday"))return r-864e5;const n=new Date(e);if(n instanceof Date){const c=n.valueOf();if(!isNaN(c))return n.getHours()===0&&n.getMinutes()===0?Math.min(r,c+432e5):c}const s=se.find(c=>t&&c.locales[t]&&e.indexOf(c.locales[t])!==-1?!0:e.indexOf(c.locales.en)!==-1);if(!s)return;const o=e.split(" ").filter(Boolean),l=nt(o)??(t==="en"?nt(o,["a","an"]):void 0);if(!l)return;const i=r-l*s.seconds*1e3;return i>0?i:void 0}function nt(a,t){for(let e=0;e<a.length;e++){const r=a[e];if(t?.includes(r))return 1;const n=+r;if(n)return n<0?void 0:n}}function ie(a,t=location.origin){if(!a)return;const e=new URL(a.startsWith("//")?`${location.protocol}${a}`:a,location.origin+location.pathname).toString();return e.startsWith(t)?e.replace(t,""):e}function oe(a,{titleSlug:t,titleId:e,lang:r}){if(!a)return"/";let n=a;return t&&(n=n.replace("{titleSlug}",t)),e&&(n=n.replace("{titleId}",e)),r&&(n=n.replace("{lang}",r)),n.endsWith("/")||(n+="/"),n.startsWith("/")||(n="/"+n),n}function q(a){if(!a)return;let t=a;t.startsWith("//")&&(t=`https:${t}`);try{return new URL(t)}catch{return}}function x(a){if(!(!a||typeof a!="string"))return a.includes("//")?q(a)?.pathname:a}function le(a,t){const e=[...t],r=[];let n=!1,s=0;const o=Math.min(a.length,100);for(let i=0;i<o;i++){if(s>=10/2){const h=10-r.length;if(h>0){const f=i+h<=a.length?a.slice(i,i+h):e.slice(0,h);r.push(...f)}break}const c=a[i],u=c.id!==void 0,g=e.findIndex(h=>u&&h.id===c.id||h.slug===c.slug||h.name==c.name),p=g===-1?void 0:e.splice(g,1)[0];!p||p.chapters[0]?.chap!==c.chapters[0]?.chap?(n=!0,r.push({...c,changed:!0})):(s++,r.push(c))}if(!n)return{hasMore:!1,rawReleases:[]};if(r.length<=10)return{hasMore:!!a[a.length-1]?.changed,rawReleases:r};const l=[];for(let i=0;i<r.length;i++){const c=r[i];(c.changed||i<10)&&l.push(c)}return{hasMore:t.length<2||t.length-e.length<2,rawReleases:l}}function ce(a,t){const e={};return a.forEach(r=>{const n=r.chapters.reduce((s,o)=>{const l=o.lang||t||"";return s[l]||(s[l]=[]),s[l].push(o),s},{});Object.entries(n).forEach(([s,o])=>{const l=`${r.slug}:${s}`;e[l]?(e[l].chapters.push(...o),N(e[l].chapters)):e[l]={...r,lang:s===""?void 0:s,chapters:o}})}),Object.values(e)}var $=(a=>(a.title="title",a.reader="reader",a.releases="releases",a.chapters="chapters",a.search="search",a))($||{}),ue=Object.defineProperty,ge=(a,t,e)=>t in a?ue(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,T=(a,t,e)=>(ge(a,typeof t!="symbol"?t+"":t,e),e);class E{constructor(t){T(this,"headless"),T(this,"siteId"),T(this,"spec"),T(this,"siteMeta"),T(this,"tags"),T(this,"context"),T(this,"methodsMap",{[$.title]:()=>this.getRawTitleData(),[$.reader]:()=>this.getRawReaderData(),[$.releases]:()=>this.getRawReleasesData(),[$.search]:()=>this.getRawSearchData(),[$.chapters]:()=>this.getRawChaptersData()}),T(this,"normalizedTagsMap"),this.siteId=t.siteId,this.spec=t.spec,this.siteMeta=t.siteMeta,this.tags=t.tags,this.context=t.context??{},this.headless=t.headless===!0}async getRawSearchData(){throw new Error("Unimplemented")}async getRawPageByType(t,e=!1){const r=await this.methodsMap[t](),n=!r&&(t===$.title||t===$.reader)&&await pe(this.spec);if(e&&!r&&!n)return;const s=location.origin+location.pathname;return{type:t,is404:n,specId:this.spec.id,siteName:fe(this.spec.name),favUrl:me(),url:s,data:r,spec:this.spec,context:this.context}}parseReaderSlug(t,e,r){let n=e;if(n[0]!=="/"&&n.includes("/"))try{n=new URL(e,location.href).pathname}catch{}if(n.endsWith("/")&&(n=n.slice(0,-1)),t.startsWith("/")||(t="/"+t),t.endsWith("/")||(t=t+"/"),t.includes("{")){const s=t.split("/").filter(Boolean),o=n.split("/").filter(Boolean);if(s.length<o.length){const l=o[s.indexOf("{lang}")],i=o[s.indexOf("{titleId}")],c=o[s.indexOf("{titleSlug}")],u=t.replace("{lang}",l).replace("{titleId}",i).replace("{titleSlug}",c);if(n.startsWith(u))return{basePath:u,lang:l?.toLowerCase(),titleId:i,titleSlug:c,slug:n.replace(u,"")}}}else if(n.startsWith(t))return{basePath:t,slug:n.replace(t,"")};return{basePath:"",slug:n}}parseTitleSlug(t){if(typeof t!="string")return{};const e=x(t),r=e?.split("/").filter(Boolean);if(!r?.length)return{};const n=this.siteMeta.titleBase.split("/").filter(Boolean),s=n.indexOf("{slug}");return(s===-1?r.length-n.length>=1:r.length===n.length)?{id:r[n.indexOf("{id}")],slug:s===-1?r.slice(n.length).join("/"):r[s]}:{slug:e}}finalizeRawReleasesData(t){const e=this.spec.releases?.title?.lang?this.siteMeta.defaultLang:void 0,r=ce(t.rawReleases,e);if(r.length)return this.context.oldRawReleases?le(r,this.context.oldRawReleases):{rawReleases:r,hasMore:!0}}getTagIdsFromNames(t){if(!t?.length)return;const e=this.normalizedTagsMap??(this.normalizedTagsMap=de(this.tags)),r=t.map(n=>e[F(n)]).filter(Boolean);return r.length===0?void 0:Array.from(new Set(r)).sort((n,s)=>n-s)}}T(E,"specId"),T(E,"siteId");function de(a){const t={};return a.forEach(({id:e,name:r,altNames:n})=>{t[F(r)]=e,n&&n.forEach(s=>{t[F(s)]=e})}),t}function F(a){const t=a.toLowerCase().replaceAll(/[^a-z0-9\s]/gi,"").trim().replaceAll(/\s+/g," ");return t[t.length-1]==="s"?t.substring(0,t.length-1):t}async function pe(a){return he()===404||a[404]&&await P(a[404],{lazy:!0,timeoutMs:5e3})?!0:document.title.toLowerCase().includes("not found")}function he(){try{return window.performance.getEntries().find(a=>a.entryType==="navigation")?.responseStatus}catch{return}}function fe(a){return(a&&d(a))??d('meta[property="og:site_name"]|attr:content')}function me(){return d('link[rel="icon"][sizes="32x32"],link[rel="icon"][sizes="192x192"],link[rel="apple-touch-icon"]|attr:href')}class w extends E{async getRawReleasesData(){if(!this.spec?.releases?.title)return;const{chapter:t,...e}=this.spec.releases.title,r=await P(e.sel,{lazy:!0,all:!0});if(!r?.length)return;const n=Date.now(),s=r.slice(0,100).map(l=>{const i=d(e.url,l),c=x(i),u=d(e.name,l),g=d(e.at,l);if(!c||!u)return;const p=rt(g,this.siteMeta.defaultLang);return{titleEl:l,id:d(e.id,l),path:c,name:u,lang:d(e.lang,l)?.toLowerCase(),at:p?Math.min(p,n):void 0}}).filter(Boolean);if(!s.length)return;const o=[];return await Promise.all(s.map(async l=>{const{path:i,titleEl:c,lang:u,at:g,...p}=l,{id:h,slug:f}=this.parseTitleSlug(i);if(!f)return;const b=p.id||h,m=await this.getChapters(t,{root:c,titleId:b,titleSlug:f,lang:u})??[];m.length&&o.push({slug:f,chapters:u||g?m.map(S=>({...S,elIndex:void 0,lang:S.lang??u,ts:S.ts??g})):m,...p,id:b})})),this.finalizeRawReleasesData({rawReleases:o})}getRawTitleData(){return this.getTitleData(this.spec.title)}async getTitleData(t){if(!t||(t.sel||t.lazy)&&!await P(t.sel??t.name,{lazy:!!t.lazy}))return;const e=d(t.name);if(!e)return;const{id:r,slug:n}=this.parseTitleSlug(location.pathname);if(!n)return;const s=_(t.tags)?.map(f=>f.split(",")).flat().map(f=>f.trim()).filter(Boolean),o=d(t.type),l=_(t.langs)?.map(f=>f.toLowerCase()),i=r||d(t.id),c=await this.getChapters(t.chapter,{lazy:!0,titleId:i,titleSlug:n})??[],u=await this.getValidImgSrc(t.img,e),g=u&&this.context.includeImgBytes?await re(u):void 0,p=this.getFirstChapterUrl(),h=t.firstBtn;return{id:i||d(t.id),url:location.origin+location.pathname,slug:n,name:e,langs:l?.length?l:t.langs&&this.siteMeta.defaultLang?[this.siteMeta.defaultLang]:void 0,tags:this.getTagIdsFromNames([...s??[],...o?[o]:[]]),chapters:c,hasMoreChapters:t.hasMore?!!document.querySelector(t.hasMore):void 0,img:u,imgBytes:g,firstUrl:p,firstBtn:!p&&h&&document.querySelector(h)?h:void 0,trackers:this.getTrackersMap(t.trackers)}}getTrackersMap(t){if(!t)return;const e=d(t.mal),r=d(t.anl);if(!e||!r)return;const n={};return e&&(n.mal=e),r&&(n.anl=r),n}getFirstChapterUrl(){const t=d(this.spec.title?.first);if(t){if(t.startsWith("http"))return t;try{return new URL(t,location.href).href}catch{return}}}getValidImgSrc(t,e){return D(33,30,()=>{const r=d(t)||d(`img[alt="${e.replaceAll('"',"")}"]|[attr:data-src,attr-contain:src]`);return!r||r.startsWith("data:")?void 0:document.querySelector(`img[srcset*="${r}"]`)?r.split(" ")[0]:r})}getRawReaderTitleData(t){const e=this.spec.reader?.title;if(!e)return;const r=e.sel?document.querySelector(e.sel)??void 0:void 0,n=d(e.name,r);if(!n)return;const s=ie(d(e.img,r));if(t?.slug){let c=this.siteMeta.titleBase;t?.id&&(c=c.replace("{id}",t.id));const u=c.includes("{slug}");if(u&&(c=c.replace("{slug}",t.slug)),!c.includes("{")){c=u?c:`${c}/${t.slug}`;const g=this.siteMeta.trailing?"/":"",p=`${location.origin}/${c}${g}`;return{name:n,img:s,url:p,slug:t.slug,id:t.id||d(e.id)}}}const o=d(e.url,r),{slug:l,id:i}=this.parseTitleSlug(o);if(!(!n||!o||!l))return{name:n,img:s,url:o,slug:l,id:i||d(e.id)||t?.id}}async getRawReaderData(){const{spec:t,siteMeta:e}=this;if(!t?.reader||!await w.isReaderPage(t.reader,!!t.generic))return;const r=t.reader.content;if(!(!r||await w.verifyImgsCotainer(r)))return;const n=this.parseReaderSlug(e.readerBase,location.pathname,location.href),{slug:s,basePath:o,lang:l}=n,i=this.getRawReaderTitleData({id:n.titleId,slug:n.titleSlug});if(!i)return;const{id:c,slug:u}=i,g=t.reader?.chapter,p=!!this.context.disableLazyChapters,h=!!this.context.includeHiddenChapters,f=await this.getChapters(g,{titleId:c,titleSlug:u,lang:l,lazy:h||!p,includeHiddenChapters:h,timeoutMs:h?3e3:29e3,includeIndex:!0,basePath:o})??[],b=d(t.reader.label)?.toLowerCase().replace(i.name.toLowerCase(),"");if(!b)return;const{vol:m,chap:S=0}=O(b)||{},y=this.findNeighborChapter({sel:t.reader.prev,basePath:o,titleUrl:i.url}),B=this.findNeighborChapter({sel:t.reader.next,basePath:o,titleUrl:i.url});return this.finalizeRawReaderData({vol:m,chap:S,lang:l??d(t.reader.lang)?.toLowerCase()??(t.reader.lang?this.siteMeta.defaultLang:void 0),slug:s,basePath:o,group:d(t.reader.group),imgs:_(t.reader.imgs),title:{id:c||d(this.spec.reader?.title.id),url:i.url,slug:u,name:i.name,langs:l?[l]:void 0,img:i.img,chapters:f,hasMoreChapters:!f.length&&!h&&!!this.context.disableLazyChapters&&!!g?.label}},{prevSlug:y,nextSlug:B})}async getRawChaptersData(){const t=this.siteMeta.chapters;if(t===W.blank)return;const e=t===W.reader,r=!t||t===W.title,n=e?(await this.getRawReaderData())?.title:r?await this.getRawTitleData():void 0,s=this.spec.chapters?.chapter,o=s?await this.getChapters(s,{titleId:n?.id,titleSlug:n?.slug,lazy:this.spec.chapters?.lazy,includeHiddenChapters:!0,lang:this.context.lang}):n?.chapters;if(!o)return;const{lang:l}=this.context,i=l?o.filter(c=>!c.lang||c.lang===l):o;return{chapters:i,title:n?{...n,chapters:[]}:await this.getTitleData(this.spec.chapters?.title),hasMore:!1,asc:!1,total:i.length}}async getRawSearchData(){const t=this.spec.search,e=this.context.lang;if(!t)return;t.delay&&await et(t.delay);const r=t.title,{chapter:n}=r,s=[],o=t.lazy?t.empty||t.loading?550:100:1,l=await D(o,50,()=>{const i=Array.from(document.querySelectorAll(r.sel));if(i.length||t.empty&&document.querySelector(t.empty)||t.loading&&!document.querySelector(t.loading))return i});if(l)return await Promise.all(l.map(async i=>{const c=d(r.url,i),u=x(c),g=d(r.name,i),{slug:p,id:h}=this.parseTitleSlug(u);if(!u||!g||!p)return;const f=d(r.lang,i);f&&e&&f!==e||s.push({id:h||d(r.id,i),slug:p,name:g,img:d(r.img??"img|[attr:data-src,attr-contain:src]",i),lang:f,chapters:await this.getChapters(n,{root:i,titleId:h,titleSlug:p})??[]})})),{rawReleases:s}}async getChapters(t,{root:e,titleId:r,titleSlug:n,lang:s,includeHiddenChapters:o=!1,lazy:l=!0,timeoutMs:i,includeIndex:c,basePath:u}={}){const g=t?.sel;if(!g||!t.label)return;let p=null;if(t.trigger&&(!o||(p=document.querySelector(t.trigger),!p)))return;const h=[],f=await D((i??(l?1e4:50))/50,50,async()=>{p?.click(),await et(100);const R=Array.from((e??document.documentElement)?.querySelectorAll(g));if(R.length)return R}),b=(f??[]).map((R,z)=>({id:d(t.id,R),label:d(t.label,R),url:d(t.url,R),at:d(t.at,R),lang:d(t.lang,R),elIndex:z}));if(((t.dismiss?(e??document.body).querySelector(t.dismiss):void 0)??p)?.click(),!f?.length)return[];const m=b.map(({label:R})=>O(R)),S=m[1]?.chap;!m[0]&&(S===void 0||S<=1)&&(m[0]={chap:0});const y=u??oe(this.siteMeta.readerBase,{titleId:r,titleSlug:n,lang:s}),B=Date.now();return m.forEach((R,z)=>{if(!R)return;const{id:Q,url:v,at:xa,lang:Ma,elIndex:Ia}=b[z],Pt=rt(xa,this.siteMeta.defaultLang),k={...R,id:Q,ts:Pt?Math.min(B,Pt):void 0};if(c&&(k.elIndex=Ia),v?.startsWith("#")){h.push(k);return}const Ct=v?.startsWith("http")&&!v.includes(`//${location.hostname}/`),Y=Ct?v:x(v);if(!Y){h.push(k);return}if(Ct){h.push({...k,slug:Y});return}const{slug:Da,lang:Ta}=this.parseReaderSlug(y,Y,v);h.push({...k,slug:Da,lang:Ta||Ma?.toLowerCase()})}),N(h)}static async isReaderPage(t,e){const r=t.sel;return e&&!r?!1:!r||!!await P(r,{lazy:!!t.lazy})}static async verifyImgsCotainer(t){const e=t.split(",").map(r=>r.trim()).filter(Boolean).map(r=>`${r} img, ${r} canvas`).join(",");return!!await P(e,{lazy:!0,all:!1})}findNeighborChapter({sel:t,basePath:e,titleUrl:r}){const n=d(t);if(!n||n.startsWith("#")||n.startsWith("/#"))return;const s=x(n);if(s&&!(s===location.pathname||r===s||r===`${location.origin}${s}`))return this.parseReaderSlug(e,s,n).slug||void 0}finalizeRawReaderData(t,{prevSlug:e,nextSlug:r}={}){const n=t.title.chapters;if(!n.length){const c=O(e),u=O(r);return!c&&!u?t:{...t,prev:c?{...c,slug:e}:void 0,next:u?{...u,slug:r}:void 0}}let s,o,l,i;for(let c=0;c<n.length&&!(s&&(!e||l)&&!r&&i);c++){const u=n[c];!s&&(t.slug==u.slug||t.chap===u.chap&&(t.vol===u.vol||t.vol===void 0))?(s=u,o=c):!l&&e===u.slug?l=u:!i&&r===u.slug&&(i=u)}return o!==void 0&&(l??(l=n[o+1]),i??(i=n[o-1])),{...t,inferVol:s?.inferVol,prev:l,next:i}}}var we=Object.defineProperty,ye=(a,t,e)=>t in a?we(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,ve=(a,t,e)=>(ye(a,typeof t!="symbol"?t+"":t,e),e);class st extends w{async getRawReaderData(){const t=`https://${location.host}`,[e,r]=await Promise.all([I(t,"api","manga","info"),I(t,"api","read","chapter")]),n=e?.value,s=r?.value;if(!n||!s)return;const o=this.parseReaderSlug(this.siteMeta.readerBase,location.pathname,location.href);if(!o)return;const l=O(s.readChapter?.title);if(l)return this.finalizeRawReaderData({basePath:o.basePath,slug:o.slug,...l,imgs:s.readChapter.pages.map(i=>new URL(i.image,location.origin).href),title:{url:`${t}/manga/${n.id}`,slug:n.id,name:n.title,tags:this.getTagIdsFromNames([n.type].filter(Boolean)),chapters:N(n.chapters.map(i=>({slug:i.id,chap:i.number})))}})}async getRawChaptersData(){const{titleSlug:t}=this.context;if(t)try{const e=await(await fetch(`${location.origin}/api/manga/info?mangaId=${t}`)).json();return{chapters:N(e.chapters.map(r=>({slug:r.id,chap:r.number})))}}catch{return}}}ve(st,"specId","atsu");var be=Object.defineProperty,Re=(a,t,e)=>t in a?be(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,$e=(a,t,e)=>(Re(a,typeof t!="symbol"?t+"":t,e),e);class V extends w{parseTitleSlug(t){return{slug:x(t)?.split("/").filter(Boolean)[1]}}}$e(V,"specId","bato");var Se=Object.defineProperty,xe=(a,t,e)=>t in a?Se(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,Me=(a,t,e)=>(xe(a,typeof t!="symbol"?t+"":t,e),e);class it extends w{async getRawReaderData(){const t=await super.getRawReaderData();if(!t)return;const e=window.pages,r=e?.map(n=>n?.image).filter(Boolean);if(!(!Array.isArray(r)||!r.length))return{...t,imgs:r,isWebtoon:e.some(n=>n.height/n.width>2)}}}Me(it,"specId","dynasty");var Ie=Object.defineProperty,De=(a,t,e)=>t in a?Ie(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,Te=(a,t,e)=>(De(a,typeof t!="symbol"?t+"":t,e),e);class ot extends w{async getRawChaptersData(){const t=this.context.titleSlug;if(!t)return;const e=`https://api.${location.host}/chapter/all/${t}`;return{chapters:(await(await fetch(e)).json()).map(Pe).filter(Boolean)}}}Te(ot,"specId","lua");function Pe(a){if(!a||typeof a.chapter_name!="string")return;const t=O(a.chapter_name);if(t)return{...t,slug:typeof a.chapter_slug=="string"?a.chapter_slug:void 0,ts:typeof a.created_at=="string"?new Date(a.created_at).valueOf():void 0}}function lt(a,t){const e=a[0]===t?a.substring(1):a;return e[e.length-1]===t?e.substring(0,e.length-1):e}var Ce=Object.defineProperty,Be=(a,t,e)=>t in a?Ce(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,je=(a,t,e)=>(Be(a,typeof t!="symbol"?t+"":t,e),e);class H extends w{async getRawReleasesData(){const t=this.detectNewSiteMeta(this.spec.releases,this.siteMeta);this.siteMeta=t??this.siteMeta;const e=await super.getRawReleasesData();if(e)return{...e,siteMeta:t}}async getRawTitleData(){const t=this.spec.title?.sel;if(t&&!await document.querySelector(t))return;const e=this.finalizeNewSiteMeta(this.siteMeta,{titleBase:this.extractBasePath(location.pathname)});this.siteMeta=e??this.siteMeta;const r=await super.getRawTitleData();if(r)return{...r,siteMeta:e}}async getRawReaderData(){const t=this.spec.reader?.sel;if(t&&!await document.querySelector(t))return;const e=ct(this.spec.reader?.title),r=e?this.finalizeNewSiteMeta(this.siteMeta,{titleBase:this.extractBasePath(x(e))}):void 0,n=await super.getRawReaderData();if(n)return{...n,siteMeta:r}}async getRawSearchData(){const t=ct(this.spec.search?.title);if(!t)return;const e=this.finalizeNewSiteMeta(this.siteMeta,{titleBase:this.extractBasePath(x(t))});this.siteMeta=e??this.siteMeta;const r=await super.getRawSearchData();if(r)return{...r,siteMeta:e}}detectNewSiteMeta(t,e){if(!t)return;const r=t.title,n=document.querySelector(r.sel)??void 0;if(!n)return;const s=x(d(r.url,n));if(s!==void 0)return this.finalizeNewSiteMeta(e,{titleBase:this.extractBasePath(s)})}finalizeNewSiteMeta(t,{titleBase:e}){if(t.titleBase!==e)return{...t,titleBase:e,readerBase:t.readerBase.replace(t.titleBase,e)}}extractBasePath(t){return lt(t,"/").split("/").slice(0,-1).join("/")}}je(H,"specId","madara");function ct(a){if(!a)return;const t=a.sel?document.querySelector(a.sel)??void 0:void 0;return d(a.url,t)}var Le=Object.defineProperty,Oe=(a,t,e)=>t in a?Le(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,Ne=(a,t,e)=>(Oe(a,typeof t!="symbol"?t+"":t,e),e);const _e={a:.1,b:.2,c:.3,d:.4};class ut extends w{parseTitleSlug(t){return{slug:x(t)?.split("/").filter(Boolean)[1]}}async getRawReleasesData(){let t=[];try{t=(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 e=[];return t.forEach(({relationships:r,attributes:n,id:s})=>{const o=r.find(({type:g})=>g==="manga"),l=C(n.volume),i=C(n.chapter);if(i===void 0)return;const{title:c}=o.attributes,u=c.en??Object.values(c)[0];e.push({slug:o.id,name:u,chapters:[{slug:n.externalUrl||s,vol:l,chap:i,lang:n.translatedLanguage,ts:new Date(n.readableAt).valueOf()}]})}),super.finalizeRawReleasesData({rawReleases:e})}async getRawTitleData(){const t="https://api.mangadex.org/manga/",[e,r]=await Promise.all([I(t,M),I(t,M,"feed")]);if(!e||!r)return;const n=r.value.data?.map?.(i=>{const{attributes:c,id:u}=i;if(typeof c!="object"||typeof u!="string"||!u)return;const{externalUrl:g,title:p,volume:h,chapter:f,translatedLanguage:b}=c;return{slug:g||u,label:p||void 0,vol:C(h),chap:C(f),lang:b||"en",ts:new Date(c.readableAt).valueOf()}}).filter(i=>i?.chap!=null)??[],{data:s}=e.value;if(!s)return;const o=dt({data:s,getTagIdsFromNames:i=>this.getTagIdsFromNames(i)});if(!o)return;const l=this.context.includeImgBytes&&o.img?await at(o.img):void 0;return{...o,imgBytes:l,chapters:N(n),hasMoreChapters:(r.value.total||0)>(r.value.limit||0)}}async getRawReaderData(){const t="https://api.mangadex.org/",[e,r,n]=await Promise.all([I(t,"chapter",M),I(t,"at-home","server",M),I(t,"manga",M,"aggregate")]);if(!e||!r||!n)return;const s=e.value.data,{volume:o,chapter:l,externalUrl:i,translatedLanguage:c}=s.attributes||{},{baseUrl:u,chapter:{data:g,dataSaver:p,hash:h}}=r.value,f=s.relationships?.find?.(v=>v.type==="manga");if(!f)return;const b=dt({data:f,getTagIdsFromNames:v=>this.getTagIdsFromNames(v)});if(!b||typeof n.value.volumes!="object")return;const m=gt(n.value)??[];(typeof l!="string"||l==="none")&&!m.length&&m.push({chap:0,slug:s.id});const S=m.findIndex(v=>v.slug===s.id),y=s.relationships?.find?.(v=>v.type==="scanlation_group"),B=u.endsWith("/")?u:u+"/",R=!!localStorage.getItem("md")?.includes?.('"dataSaver":true'),z=`${B}${R?"data-saver":"data"}/`,Q=((R?p:g)??[]).map?.(v=>`${z}${h}/${v}`)??[];return{externalUrl:i,vol:C(o),inferVol:m[S]?.inferVol,chap:C(l)||0,imgs:Q,lang:c,slug:s.id,prev:m[S+1],next:m[S-1],basePath:"/chapter/",groupName:y?.attributes?.name,groupUrl:y?.attributes?.website,isWebtoon:f?.attributes?.tags?.some(v=>v.attributes.name.en==="Long Strip"),title:{...b,chapters:m}}}async getRawChaptersData(){const{titleSlug:t}=this.context,e=this.context.lang||"en";let r;try{const n=await fetch(`https://api.mangadex.org/manga/${t}/aggregate?translatedLanguage[]=${e}`);r=gt(await n.json())}catch{return}if(r)return{chapters:r,lang:e,asc:!1,hasMore:!1,total:r.length}}}Ne(ut,"specId","mangadex");function C(a){if(typeof a!="string"||a==="none")return;const t=parseFloat(a);if(t!==t)return;const e=a[a.length-1];return t+(_e[e]??0)}function gt(a){if(typeof a.volumes!="object")return;const t=Object.values(a.volumes).map(({volume:e,chapters:r})=>{const n=C(e);return Object.values(r).map(({id:s,chapter:o})=>{const l=C(o);if(l!==void 0)return{vol:n,chap:l,slug:s}})}).flat().filter(Boolean).reverse();return N(t)}function dt({data:a,getTagIdsFromNames:t}){const{id:e,attributes:r,relationships:n}=a;if(!e||typeof e!="string"||typeof r!="object")return;const{title:s,availableTranslatedLanguages:o,altTitles:l,tags:i,contentRating:c}=r;if(typeof s!="object"||o&&!Array.isArray(o))return;const u=Object.values(s)[0];if(!u||typeof u!="string")return;const g=Ae(),p=(o??[])?.map?.(y=>typeof y=="string"?y:void 0).filter(Boolean)??[],h=p.filter(y=>y&&(!g||g.includes(y))),f=l?.map?.(y=>{const[[,B]=[]]=Object.entries(y);return B}),b=n?.find?.(y=>y.type==="cover_art")?.attributes?.fileName,m=b?`https://mangadex.org/covers/${e}/${b}.256.jpg`:void 0,S=(i||[]).map(y=>y?.attributes?.name?.en).concat(c).filter(Boolean);return{url:`${location.origin}/title/${e}`,slug:e,name:u,altNames:f,langs:h.length>0?h:p.length>0?p:["en"],img:m,tags:t(S)}}function Ae(){const a=localStorage.getItem("md");if(a)try{const t=JSON.parse(a)?.userPreferences?.filteredLanguages;return t?.length?t:void 0}catch{return}}var ze=Object.defineProperty,ke=(a,t,e)=>t in a?ze(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,We=(a,t,e)=>(ke(a,typeof t!="symbol"?t+"":t,e),e);class pt extends w{async getRawReaderData(){if((await P(".current-viewtype",{lazy:!0,all:!1}))?.textContent?.trim().toLowerCase()!=="volume")return await super.getRawReaderData()}async getRawChaptersData(){const t=this.context.lang??"en",e=await P(`.tab-content[data-name="chapter"] a.dropdown-item[data-code="${t.toUpperCase()}"]`,{lazy:!0,all:!1});if(e)return e.click(),await P(`.tab-content[data-name="chapter"] li.item[data-number] a[href*="/${t}/"]`,{lazy:!0,all:!1}),await super.getRawChaptersData()}async getRawSearchData(){const t=await super.getRawSearchData();if(!t)return;const e=this.context.lang??"en";return{...t,rawReleases:t.rawReleases.map(r=>({...r,lang:r.lang??e}))}}}We(pt,"specId","mangafire");var Ee=Object.defineProperty,Ue=(a,t,e)=>t in a?Ee(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,qe=(a,t,e)=>(Ue(a,typeof t!="symbol"?t+"":t,e),e);class ht extends w{async getRawReaderData(){const t=await super.getRawReaderData();return t&&{...t,imgs:await this.getImgs()}}parseReaderSlug(t,e){const{slug:r,basePath:n}=super.parseReaderSlug(t,e),s=r.split("/").filter(Boolean),o=s[s.length-1];return{basePath:n,slug:o.startsWith("pg-")?s.slice(0,-1).join("/"):r}}async getImgs(){const t=await D(100,20,()=>window.imgsrcs),e=window.CryptoJS,r=e.enc.Hex.parse("e11adc3949ba59abbe56e057f20f883e"),n={iv:e.enc.Hex.parse("1234567890abcdef1234567890abcdef"),padding:e.pad.ZeroPadding};return e.AES.decrypt(t,r,n).toString(e.enc.Utf8).split(",")}}qe(ht,"specId","mangago");var Fe=Object.defineProperty,Ve=(a,t,e)=>t in a?Fe(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,He=(a,t,e)=>(Ve(a,typeof t!="symbol"?t+"":t,e),e);class ft extends w{async getRawTitleData(){const t=`https://backend.${location.host}`,e=await I(t,"chapters-with-ids",M,M),r=await super.getRawTitleData();if(!(!e?.value||!r))return{...r,langs:await Je(),chapters:J(e.value)}}async getRawChaptersData(){const{titleSlug:t,lang:e}=this.context;if(t)try{const r=await fetch(`https://backend.${location.host}/chapters-with-ids/${t}/${e??"en"}`);return{chapters:J(await r.json())}}catch{return}}async getRawReaderData(){const t=`https://backend.${location.host}`,[e,r]=await Promise.all([I(t,"chapters-with-ids",M,M),I(t,"read",M)]);if(!e?.value||!r?.value?.length)return;const n=await super.getRawReaderData();if(!n)return;const s=new URLSearchParams(location.search).get("number")??"0";return{...n,slug:`${n.slug}?number=${s}`,imgs:r.value,title:{...n.title,chapters:J(e.value)}}}}He(ft,"specId","mangahaven");async function Je(){const a=document.querySelector('[role="tabpanel"] button');if(!a)return;const t=document.createElement("style");t.innerHTML="[data-radix-popper-content-wrapper] { display: none !important; }",document.head.appendChild(t),a.click();const e=await D(50,10,()=>_('img[src*="/flags/"]|attr:src|pattern:.+/(.+).svg'));return a.click(),setTimeout(()=>document.head.removeChild(t),1e3),e}function J(a){const t=[];return a?.forEach?.(e=>{const r=+e.chapter;isNaN(r)||!e.id||t.push({chap:r,slug:`${e.id}?number=${e.chapter}`,lang:e.lang?.toLowerCase?.()})}),t}var Qe=Object.defineProperty,Ye=(a,t,e)=>t in a?Qe(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,Ge=(a,t,e)=>(Ye(a,typeof t!="symbol"?t+"":t,e),e);class mt extends V{}Ge(mt,"specId","mangapill");var Ze=Object.defineProperty,Ke=(a,t,e)=>t in a?Ze(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,Xe=(a,t,e)=>(Ke(a,typeof t!="symbol"?t+"":t,e),e);class wt extends w{async getRawTitleData(){const t=await super.getRawTitleData();return t&&{...t,chapters:t.chapters.map(e=>({...e,slug:e.slug?.split("/").filter(Boolean).slice(-1)[0]}))}}}Xe(wt,"specId","mangaplus");var ta=Object.defineProperty,ea=(a,t,e)=>t in a?ta(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,aa=(a,t,e)=>(ea(a,typeof t!="symbol"?t+"":t,e),e);class yt extends H{async getRawReaderData(){const t=await super.getRawReaderData();if(t)return{...t,title:{...t.title,id:await this.getReaderTitleId()}}}async getReaderTitleId(){const t=await window.HISTORY?.getStored?.();if(!t||typeof t!="object")return;const e=Object.values(t).filter(Boolean);if(!e.length)return;e.sort((n,s)=>s.time-n.time);const r=e[0].manga_ID;return typeof r=="string"?r:typeof r=="number"?r+"":void 0}detectNewSiteMeta(t,e){if(this.siteId==="realm"||!t)return;const r={...e,releases:lt(location.pathname,"/")},n=t.title,s=document.querySelector(n.sel)??void 0;if(!s)return;const o=x(d(n.url,s));if(o===void 0)return;const l=s.querySelector(n.chapter.sel)??void 0;if(!(!l||x(d(n.chapter.url,l))===void 0))return r.titleBase=this.extractBasePath(o),e.titleIdType===U.id&&(d(n.id,s)||(e.titleIdType=U.name)),this.finalizeNewSiteMeta(e,r)}finalizeNewSiteMeta(t,e){if(this.siteId==="realm")return;const r=Object.keys(e),n={...t};let s=!1;return r.forEach(o=>{const l=e[o];l!==t[o]&&(n[o]=l,s=!0)}),s?n:void 0}}aa(yt,"specId","mangastream");var ra=Object.defineProperty,na=(a,t,e)=>t in a?ra(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,sa=(a,t,e)=>(na(a,typeof t!="symbol"?t+"":t,e),e);class vt extends w{async getRawTitleData(){const t=await super.getRawTitleData();if(t)return{...t,hasMoreChapters:t.chapters.length===50}}}sa(vt,"specId","mgeko");var ia=Object.defineProperty,oa=(a,t,e)=>t in a?ia(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,la=(a,t,e)=>(oa(a,typeof t!="symbol"?t+"":t,e),e);class bt extends E{async getRawReleasesData(){}async getRawTitleData(){const t=await Rt();if(!t)return;const e=d("#cover img|[attr:data-src,attr-contain:src]");return{...t,img:e}}async getRawReaderData(){const t=await Rt();if(!t)return;const e=d("#image-container img|[attr:data-src,attr-contain:src]"),r=q(e);if(!r)return;const n=r.pathname.split("/").filter(Boolean).slice(0,-1).join("/"),s=`${r.origin}/${n}/`,o=r.pathname.split("?")[0].split("#")[0].split(".").slice(-1)[0]||"webp";return{chap:0,slug:"1",basePath:t.url.replace(location.origin,"").slice(1),imgs:Array.from({length:t.totalImgs},(l,i)=>`${s}${i+1}.${o}`),title:{name:t.name,slug:t.slug,url:t.url,chapters:[{slug:"1",chap:0}]}}}async getRawChaptersData(){const t=await this.getRawTitleData();if(!t)return;const{chapters:e,...r}=t;return{title:{...r,chapters:[]},chapters:e}}}la(bt,"specId","nhentai");async function Rt(){const a=await D(100,20,()=>window._gallery);if(!a?.id||!a?.title||!a?.images?.pages)return;const{title:t,images:{pages:e,cover:r},media_id:n}=a;return{name:t.pretty??t.english??t.japanese,slug:a.id+"",url:`${location.origin}/g/${a.id}`,chapters:[{slug:"1",chap:0}],totalImgs:e.length,img:await ca(n,r.t)}}async function ca(a,t){if(!a||!t)return;const e={j:"jpg",p:"png",g:"gif",w:"webp"}[t];if(!e)return;const r=(await D(10,20,()=>window._n_app))?.options?.thumb_cdn_urls?.[0];if(r)return`https://${r}/galleries/${a}/cover.${e}`}var ua=Object.defineProperty,ga=(a,t,e)=>t in a?ua(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,da=(a,t,e)=>(ga(a,typeof t!="symbol"?t+"":t,e),e);class $t extends w{async getRawChaptersData(){const t=this.context.titleSlug;if(!t)return;const e=`https://api.${location.host}/api/post/chapters?postSlug=${t}`;return{chapters:(await(await fetch(e)).json()).map(pa).filter(Boolean)}}}da($t,"specId","qi");function pa(a){if(!(!a||typeof a.number!="number"))return{chap:a.number,slug:typeof a.slug=="string"?a.slug:void 0,ts:typeof a.createdAt=="string"?new Date(a.createdAt).valueOf():void 0}}var ha=Object.defineProperty,fa=(a,t,e)=>t in a?ha(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,ma=(a,t,e)=>(fa(a,typeof t!="symbol"?t+"":t,e),e);class St extends w{async getRawTitleData(){const t=await super.getRawTitleData();if(!t)return;const e=_(".info-detail__row > .genre-btn,.info__right .stats__row:first-child|text")?.map(r=>[r,...r.split(" ")]).flat();return xt({...t,tags:this.getTagIdsFromNames(e)??[]},".episode-header .episode-cnt")}async getRawReaderData(){const t=await super.getRawReaderData();if(!t)return;const e=`${location.origin}/series/${t.title.slug}/info`;return{...t,title:{...xt({...t.title,url:e,tags:[]},".episode-list .js-ep-cnt"),hasMoreChapters:!1}}}async getRawChaptersData(){const{rawId:t,skip:e}=this.context,r=1e3,n=e?Math.floor(e/1e3)+1:1;try{const s=await fetch(`/series/${t}/episodes?page=${n}&sort=NEWEST&max_limit=${r}`);return wa(await s.json())}catch{return}}parseTitleSlug(t){if(!t)return{};const e=t.split("/").filter(Boolean);return{slug:e[1]??e[0]}}}ma(St,"specId","tapas");function xt(a,t){const e=ya(t)>20;return{...a,chapters:e?[]:a.chapters,hasMoreChapters:e}}function wa(a){const t=a?.data?.episodes;if(!Array.isArray(t))return;const e=t.map(n=>({chap:n.pending_scene??n.scene,slug:n.id+"",ts:new Date(n.publish_date)?.valueOf?.()||void 0})),r=a?.data?.pagination;return{chapters:e,total:r?.total??e.length,hasMore:!!r?.has_next}}function ya(a){return+(document.querySelector(a)?.textContent?.trim().split(" ")[0]||0)}var va=Object.defineProperty,ba=(a,t,e)=>t in a?va(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,Ra=(a,t,e)=>(ba(a,typeof t!="symbol"?t+"":t,e),e);class Mt extends w{async getRawTitleData(){const t=new URLSearchParams(location.search),e=t.get("episode_no"),r=t.get("title_no");if(e||!r)return;const n=await super.getRawTitleData();if(!n)return;const s=location.hostname.startsWith("m."),o=location.pathname.split("/")[1];return{...n,slug:`${n.slug}?title_no=${r}`,id:r,langs:o?[o]:void 0,chapters:s?[]:n.chapters.map(l=>({...l,lang:o})),hasMoreChapters:s||(document.querySelector(".paginate")?.childElementCount??1)>1}}async getRawReaderData(){const t=new URLSearchParams(location.search),e=t.get("episode_no"),r=t.get("title_no"),n=e?+e:void 0;if(!e||!r||typeof n!="number"||isNaN(n))return;const s=document.title.split("|")[1]?.trim();if(!s)return;const o=location.pathname.split("/"),l=`${o.slice(0,4).join("/")}/list?title_no=${r}`,i=await this.getChapters({sel:"#sequence_scroll li.eg-flick-panel,#toolbar .episode_lst li[data-episode-no]",url:"a|attr:href",label:"|attr:data-episode-no || a|attr:href|pattern:.+episode_no=(\\d+).*"},{lazy:!1,titleId:r,titleSlug:l}),c=o[1];return{chap:n,lang:c,slug:`${location.pathname}?title_no=${r}&episode_no=${e}`,basePath:"",imgs:await this.getReaderImgs(),isWebtoon:!0,title:{id:r,url:l,slug:l,name:s,langs:[c],chapters:(i??[]).map(u=>({...u,lang:c})),hasMoreChapters:!1}}}async getReaderImgs(){const t=_("#_imageList img|[attr:data-url,attr:src]");return t?.length?t:await D(100,50,()=>window.__viewerState__?.scrollViewerParam?.imageList?.map(({url:e})=>e).filter(Boolean))}parseReaderSlug(t,e,r){if(!r)return{basePath:"",slug:e};if(r.startsWith("http://")||r.startsWith("https://")){const n=q(r);return{basePath:"",slug:n.pathname+n.search}}return{basePath:"",slug:r}}}Ra(Mt,"specId","webtoon");const $a=[st,V,it,ot,H,ut,pt,ht,ft,mt,wt,yt,vt,bt,$t,St,Mt];function It(a){const t=$a.find(e=>e.specId===a.spec.id)??w;return new t(a)}async function Sa(a){const{spec:t}=a,e=a.siteMeta??t?.meta;if(t&&e){const r=a.type?[a.type]:Dt(e,t.generic);if(!r.length)return;const n=It({...a,spec:t,siteMeta:e});return await L(r.map(s=>n.getRawPageByType(s,r.length>1)))}return await L((a.genericSpecs??[]).map(r=>{if(!r.meta||!r.generic)return[];const n=Dt(r.meta,r.generic);if(!n.length)return[];const s=It({...a,spec:r,siteMeta:r.meta});return n.map(o=>s.getRawPageByType(o,!0))}).flat())}function Dt(a,t){if(location.pathname==="/")return[];const{titleBase:e,readerBase:r}=a,n=location.pathname.split("/").filter(Boolean),s=Tt(n,r),o=Tt(n,e);if(s&&o)return[$.reader,$.title];const l=[];return!o&&(s!==!1||t)&&l.push($.reader),!s&&(o!==!1||t)&&l.push($.title),!l.length&&t?[$.reader,$.title]:l}function Tt(a,t){if(!t)return;const e=t.split("/").filter(Boolean),r=e.indexOf("{slug}"),n=r===e.length-1,s=!n&&r!==-1;if(n&&(e.pop(),!e.length))return;const o=a.length-e.length;if(s?o<0:o<=0)return!1;let l=!1;for(let i=0;i<e.length;i++){const c=e[i];if(c[0]!=="{"){if(c!==a[i])return!1;l=!0}}if(l&&o===(s?0:1))return!0}j.PageType=$,j.scrape=Sa});
1
+ (function(j,L){typeof exports=="object"&&typeof module<"u"?L(exports):typeof define=="function"&&define.amd?define(["exports"],L):(j=typeof globalThis<"u"?globalThis:j||self,L(j._trackkun_={}))})(this,function(j){"use strict";function L(a){let e=!1;return new Promise((t,r)=>{Promise.all(a.map(async n=>{const s=await n;!e&&s&&(e=!0,t(s))})).then(()=>{e||t(void 0)})})}const je=/(vol(ume)?|season)(\s*|-|\.)(\d+)/i,Le=/^S([1-9])\s/i,Oe=/(ch(ap(t(er)?|\.)?|\.)?|#|episode\.?|capitolo\.?|capitulo\.?|bölüm\.?)(\s*|-)(\d+([_-~,.]\d+)?)/i,Ne=/\d+([_-~,.]\d+)?/,_e=/[_-~,]/;function Ae(a){const e=a.match(je);if(e)return{volStr:e[0],volValueStr:e[4]};const t=a.match(Le);return t?{volStr:t[0],volValueStr:t[1]}:{}}function O(a){if(!a)return;if(!isNaN(+a))return{chap:+a};const{volStr:e,volValueStr:t}=Ae(a),r=e?a.replace(e,"").trim():a,n=r.match(Oe),s=r.match(Ne),o=n?.[6],l=o??s?.[0];if(!l)return;const i=+l.replace(_e,".");return isNaN(i)?void 0:{vol:e&&t&&!isNaN(+t)&&a.indexOf(e)<a.indexOf(o?n[0]:s[0])?+t:void 0,chap:i}}function ze(){return Math.random().toString(16).slice(2)}async function ke({addListener:a,removeListener:e,transform:t,filter:r,handler:n,onTimeout:s,timeout:o,once:l}){return new Promise(i=>{a(g);const c=()=>l===!0&&e(g),u=o?setTimeout(()=>{c(),i(void 0),s?.()},o):void 0;async function g(p,...h){p=t?t(p):p,p!==void 0&&(!r||r(p,...h))&&(c(),i(p),n?.(p,...h),u&&clearTimeout(u))}})}async function We(a){return(await ke({addListener:e=>window.addEventListener("message",e),removeListener:e=>window.removeEventListener("message",e),...a}))?.data}async function Ee(a){const{receiverWindow:e,timeout:t,targetOrigin:r,event:n,args:s}=a,o={reqId:ze(),event:n,args:s};return(e||window)?.postMessage(o,r??"*"),(await We({filter:l=>l?.data?.resId===o.reqId,timeout:t??3e4,once:!0}))?.result}const M={isAny:!0};function I(a,...e){return Ee({event:"tk:fetchResult",args:{baseUrl:a,segments:e}})}function N(a,e){a.sort((i,c)=>i.vol===void 0||c.vol===void 0?c.chap-i.chap:c.vol-i.vol||c.chap-i.chap);const t={},r={};for(let i=a.length-1;i>=0;i--){const c=a[i],u=c.group??"";t[u]=(t[u]??0)+1;const g=c.lang??"";c.vol!==void 0?r[g]=c.vol:r[g]!==void 0&&(c.inferVol=r[g])}const n=[],s={},o=e?.preferGroup,l=o?i=>i.lang??"":i=>[i.lang,i.group].filter(Boolean).join(":");for(const i of a){const c=l(i),u=s[c],g=n[u];if(!(g&&g.chap===i.chap&&(g.vol===i.vol||g.vol===void 0||i.vol===void 0))){s[c]=n.length,n.push(i);continue}if(!o){g.vol===void 0&&i.vol!=null&&(n[u]=i);continue}g.group!==o&&(i.group==o||g.group&&!i.group||t[i.group??""]>t[g.group??""])&&(n[u]=i)}return n}async function D(a,e,t){const r=await t(()=>{a=0});if(r!==void 0)return r;if(!(a<=0))return await new Promise(n=>{setTimeout(async()=>{const s=await D(a-1,e,t);n(s)},e)})}async function P(a,e,t=0){const r=e.root??document.documentElement,n=e.timeoutMs??1e4;return D(e.lazy===!0?n/50:0,50,()=>{const s=e.all===!0?Array.from(r.querySelectorAll(a)):r.querySelector(a)??void 0;return(e.all?!s?.length:!s)?void 0:s})}const G={text:He,attr:Je,"attr-contain":Qe,value:Ye,row:Ge,"bg-image":Ze},Ue={pattern:Ke,remove:Xe};function d(a,e){if(a)return Z(a,e,Fe)}function _(a,e){if(a)return Z(a,e,Ve)}function Z(a,e,t){if(!a)return;const r=a.split("||").map(n=>n.trim()).filter(n=>!!n&&n.includes("|"));for(const n of r){const s=qe(n);if(!s)continue;const o=t(e??document.documentElement,s);if(o)return o}}function qe(a){const[e,t,...r]=a.split("|");if(!t)return;const n=t?.startsWith("[")&&t.endsWith("]")?t.substring(1,t.length-1).split(","):[t];return{selector:e||void 0,extractors:n.map(K),transformers:r.map(K)}}function K(a){const e=a.indexOf(":"),t=e!==-1;return{fn:t?a.substring(0,e):a,param:t?a.substring(e+1):""}}function Fe(a,e){if(!e.selector)return X(a,e);const t=e.selector.split(",");for(const r of t){const n=Array.from(a.querySelectorAll(r));for(const s of n){const o=X(s,e);if(o)return o}}}function Ve(a,e){const t=e.selector?Array.from(a.querySelectorAll(e.selector)):[a],r=[];for(const n of t)for(const s of e.extractors){const o=G[s.fn],l=o(n,s.param);if(l){r.push(ee(l,e.transformers));break}}if(r.length)return r}function X(a,e){for(const t of e.extractors){const r=G[t.fn],n=r(a,t.param);if(n)return ee(n,e.transformers)}}function ee(a,e){let t=a;for(const r of e){const n=Ue[r.fn];n&&(t=n(t,r.param).trim())}return t}function He(a){return Array.from(a.childNodes).filter(e=>e.nodeType===3).map(e=>A(e.textContent)).filter(Boolean).join(" ").trim()||A(a.textContent)}function Je(a,e){return A(a.getAttribute(e))}function Qe(a,e){let t=a.getAttribute(e);if(!t){const r=a.getAttributeNames().find(n=>n.includes(e));r&&(t=a.getAttribute(r))}return A(t)}function Ye(a){return a.value}function Ge(a,e){if(!e)return;const t=A(a.textContent)?.toLowerCase(),r=e.toLowerCase();if(!(t!==r&&t!==`${r}:`))return A(a.nextElementSibling?.textContent??a.nextSibling?.textContent)}function Ze(a){const e=getComputedStyle(a).backgroundImage;if(!(!e||!e.startsWith("url(")))return e.slice(5,-2)||void 0}function A(a){if(a)return a?.replace(/(\n|\t)/g," ").trim()||void 0}function Ke(a,e){if(e)try{return a.replace(new RegExp(e,"i"),"$1")}catch{}return a}function Xe(a,e){if(e)try{return a.replaceAll(new RegExp(e,"gi"),"")}catch{}return a}var et=(a=>(a[a.reading=1]="reading",a[a.paused=2]="paused",a[a.plan=3]="plan",a[a.completed=4]="completed",a[a.dropped=5]="dropped",a[a.deleted=6]="deleted",a))(et||{}),tt=(a=>(a[a.ok=1]="ok",a[a.hidden=2]="hidden",a[a.deleted=3]="deleted",a))(tt||{}),at=(a=>(a[a.aggregator=0]="aggregator",a[a.scanlator=1]="scanlator",a))(at||{}),rt=(a=>(a[a.pending=0]="pending",a[a.completed=1]="completed",a[a.offline=2]="offline",a[a.incompat=3]="incompat",a))(rt||{}),U=(a=>(a.id="id",a.name="name",a.slug="slug",a))(U||{}),W=(a=>(a.blank="about:blank",a.title="meta.title",a.reader="meta.reader",a))(W||{});function te(a=0){return new Promise(e=>setTimeout(e,a))}async function ae(a,e=240){return new Promise(t=>{const r=new Image;r.crossOrigin="anonymous",r.onerror=()=>t(void 0),r.onload=()=>{const n=document.createElement("canvas"),s=n.getContext("2d"),o=Math.max(1,r.naturalWidth/e),l=r.naturalWidth/o,i=r.naturalHeight/o;n.width=l,n.height=i;const c=/iPad|iPhone|iPod/.test(navigator.userAgent);try{s.drawImage(r,0,0,l,i);const u=n.toDataURL(c?"image/jpg":"image/webp",c?.99:.8).split(",").slice(-1)[0];t(u)}catch{t(void 0)}},r.src=a})}async function nt(a,e=240){const t=await st(a);if(t)return await new Promise(async r=>{const n=ae(t,e),s=setTimeout(()=>r(void 0),100),o=await n;clearTimeout(s),r(o)})}async function st(a){try{const e=await fetch(a);if(e.status>=400)return;const t=await e.blob();return URL.createObjectURL(t)}catch{return}}const it=[{seconds:1,locales:{en:"sec",vi:"gi\xE2y",tr:"ikinci",es:"segunda"}},{seconds:60,locales:{en:"min",vi:"ph\xFAt",tr:"dakika"}},{seconds:3600,locales:{en:"hour",vi:"gi\u1EDD",tr:"saat",fr:"heure",it:"ora",es:"hora"}},{seconds:86400,locales:{en:"day",vi:"ng\xE0y",tr:"g\xFCn",fr:"jour",it:"giorno",es:"d\xEDa"}},{seconds:604800,locales:{en:"week",vi:"tu\u1EA7n",tr:"hafta",fr:"semaine",it:"settimana",es:"semana"}},{seconds:2592e3,locales:{en:"month",vi:"th\xE1ng",tr:"ay",fr:"mois",it:"mese",es:"mes"}},{seconds:31536e3,locales:{en:"year",vi:"n\u0103m",tr:"yil",fr:"an",it:"anno",es:"a\xF1o"}}];function re(a,e){const t=a?.toLowerCase();if(!t)return;const r=Date.now();if(t.includes("now"))return r;if(t.includes("yesterday"))return r-864e5;const n=new Date(t);if(n instanceof Date){const c=n.valueOf();if(!isNaN(c))return n.getHours()===0&&n.getMinutes()===0?Math.min(r,c+432e5):c}const s=it.find(c=>e&&c.locales[e]&&t.indexOf(c.locales[e])!==-1?!0:t.indexOf(c.locales.en)!==-1);if(!s)return;const o=t.split(" ").filter(Boolean),l=ne(o)??(e==="en"?ne(o,["a","an"]):void 0);if(!l)return;const i=r-l*s.seconds*1e3;return i>0?i:void 0}function ne(a,e){for(let t=0;t<a.length;t++){const r=a[t];if(e?.includes(r))return 1;const n=+r;if(n)return n<0?void 0:n}}function ot(a,e=location.origin){if(!a)return;const t=new URL(a.startsWith("//")?`${location.protocol}${a}`:a,location.origin+location.pathname).toString();return t.startsWith(e)?t.replace(e,""):t}function lt(a,{titleSlug:e,titleId:t,lang:r}){if(!a)return"/";let n=a;return e&&(n=n.replace("{titleSlug}",e)),t&&(n=n.replace("{titleId}",t)),r&&(n=n.replace("{lang}",r)),n.endsWith("/")||(n+="/"),n.startsWith("/")||(n="/"+n),n}function q(a){if(!a)return;let e=a;e.startsWith("//")&&(e=`https:${e}`);try{return new URL(e)}catch{return}}function x(a){if(!(!a||typeof a!="string"))return a.includes("//")?q(a)?.pathname:a}function ct(a,e){const t=[...e],r=[];let n=!1,s=0;const o=Math.min(a.length,100);for(let i=0;i<o;i++){if(s>=10/2){const h=10-r.length;if(h>0){const f=i+h<=a.length?a.slice(i,i+h):t.slice(0,h);r.push(...f)}break}const c=a[i],u=c.id!==void 0,g=t.findIndex(h=>u&&h.id===c.id||h.slug===c.slug||h.name==c.name),p=g===-1?void 0:t.splice(g,1)[0];!p||p.chapters[0]?.chap!==c.chapters[0]?.chap?(n=!0,r.push({...c,changed:!0})):(s++,r.push(c))}if(!n)return{hasMore:!1,rawReleases:[]};if(r.length<=10)return{hasMore:!!a[a.length-1]?.changed,rawReleases:r};const l=[];for(let i=0;i<r.length;i++){const c=r[i];(c.changed||i<10)&&l.push(c)}return{hasMore:e.length<2||e.length-t.length<2,rawReleases:l}}function ut(a,e){const t={};return a.forEach(r=>{const n=r.chapters.reduce((s,o)=>{const l=o.lang||e||"";return s[l]||(s[l]=[]),s[l].push(o),s},{});Object.entries(n).forEach(([s,o])=>{const l=`${r.slug}:${s}`;t[l]?(t[l].chapters.push(...o),N(t[l].chapters)):t[l]={...r,lang:s===""?void 0:s,chapters:o}})}),Object.values(t)}var $=(a=>(a.title="title",a.reader="reader",a.releases="releases",a.chapters="chapters",a.search="search",a))($||{}),gt=Object.defineProperty,dt=(a,e,t)=>e in a?gt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,T=(a,e,t)=>(dt(a,typeof e!="symbol"?e+"":e,t),t);class E{constructor(e){T(this,"headless"),T(this,"siteId"),T(this,"spec"),T(this,"siteMeta"),T(this,"tags"),T(this,"context"),T(this,"methodsMap",{[$.title]:()=>this.getRawTitleData(),[$.reader]:()=>this.getRawReaderData(),[$.releases]:()=>this.getRawReleasesData(),[$.search]:()=>this.getRawSearchData(),[$.chapters]:()=>this.getRawChaptersData()}),T(this,"normalizedTagsMap"),this.siteId=e.siteId,this.spec=e.spec,this.siteMeta=e.siteMeta,this.tags=e.tags,this.context=e.context??{},this.headless=e.headless===!0}async getRawSearchData(){throw new Error("Unimplemented")}async getRawPageByType(e,t=!1){const r=await this.methodsMap[e](),n=!r&&(e===$.title||e===$.reader)&&await ht(this.spec);if(t&&!r&&!n)return;const s=location.origin+location.pathname;return{type:e,is404:n,specId:this.spec.id,siteName:mt(this.spec.name),favUrl:wt(),url:s,data:r,spec:this.spec,context:this.context}}parseReaderSlug(e,t,r){let n=t;if(n[0]!=="/"&&n.includes("/"))try{n=new URL(t,location.href).pathname}catch{}if(n.endsWith("/")&&(n=n.slice(0,-1)),e.startsWith("/")||(e="/"+e),e.endsWith("/")||(e=e+"/"),e.includes("{")){const s=e.split("/").filter(Boolean),o=n.split("/").filter(Boolean);if(s.length<o.length){const l=o[s.indexOf("{lang}")],i=o[s.indexOf("{titleId}")],c=o[s.indexOf("{titleSlug}")],u=e.replace("{lang}",l).replace("{titleId}",i).replace("{titleSlug}",c);if(n.startsWith(u))return{basePath:u,lang:l?.toLowerCase(),titleId:i,titleSlug:c,slug:n.replace(u,"")}}}else if(n.startsWith(e))return{basePath:e,slug:n.replace(e,"")};return{basePath:"",slug:n}}parseTitleSlug(e){if(typeof e!="string")return{};const t=x(e),r=t?.split("/").filter(Boolean);if(!r?.length)return{};const n=this.siteMeta.titleBase.split("/").filter(Boolean),s=n.indexOf("{slug}");return(s===-1?r.length-n.length>=1:r.length===n.length)?{id:r[n.indexOf("{id}")],slug:s===-1?r.slice(n.length).join("/"):r[s]}:{slug:t}}finalizeRawReleasesData(e){const t=this.spec.releases?.title?.lang?this.siteMeta.defaultLang:void 0,r=ut(e.rawReleases,t);if(r.length)return this.context.oldRawReleases?ct(r,this.context.oldRawReleases):{rawReleases:r,hasMore:!0}}getTagIdsFromNames(e){if(!e?.length)return;const t=this.normalizedTagsMap??(this.normalizedTagsMap=pt(this.tags)),r=e.map(n=>t[F(n)]).filter(Boolean);return r.length===0?void 0:Array.from(new Set(r)).sort((n,s)=>n-s)}}T(E,"specId"),T(E,"siteId");function pt(a){const e={};return a.forEach(({id:t,name:r,altNames:n})=>{e[F(r)]=t,n&&n.forEach(s=>{e[F(s)]=t})}),e}function F(a){const e=a.toLowerCase().replaceAll(/[^a-z0-9\s]/gi,"").trim().replaceAll(/\s+/g," ");return e[e.length-1]==="s"?e.substring(0,e.length-1):e}async function ht(a){return ft()===404||a[404]&&await P(a[404],{lazy:!0,timeoutMs:5e3})?!0:document.title.toLowerCase().includes("not found")}function ft(){try{return window.performance.getEntries().find(a=>a.entryType==="navigation")?.responseStatus}catch{return}}function mt(a){return(a&&d(a))??d('meta[property="og:site_name"]|attr:content')}function wt(){return d('link[rel="icon"][sizes="32x32"],link[rel="icon"][sizes="192x192"],link[rel="apple-touch-icon"]|attr:href')}class w extends E{async getRawReleasesData(){if(!this.spec?.releases?.title)return;const{chapter:e,...t}=this.spec.releases.title,r=await P(t.sel,{lazy:!0,all:!0});if(!r?.length)return;const n=Date.now(),s=r.slice(0,100).map(l=>{const i=d(t.url,l),c=x(i),u=d(t.name,l),g=d(t.at,l);if(!c||!u)return;const p=re(g,this.siteMeta.defaultLang);return{titleEl:l,id:d(t.id,l),path:c,name:u,lang:d(t.lang,l)?.toLowerCase(),at:p?Math.min(p,n):void 0}}).filter(Boolean);if(!s.length)return;const o=[];return await Promise.all(s.map(async l=>{const{path:i,titleEl:c,lang:u,at:g,...p}=l,{id:h,slug:f}=this.parseTitleSlug(i);if(!f)return;const b=p.id||h,m=await this.getChapters(e,{root:c,titleId:b,titleSlug:f,lang:u})??[];m.length&&o.push({slug:f,chapters:u||g?m.map(S=>({...S,elIndex:void 0,lang:S.lang??u,ts:S.ts??g})):m,...p,id:b})})),this.finalizeRawReleasesData({rawReleases:o})}getRawTitleData(){return this.getTitleData(this.spec.title)}async getTitleData(e){if(!e||(e.sel||e.lazy)&&!await P(e.sel??e.name,{lazy:!!e.lazy}))return;const t=d(e.name);if(!t)return;const{id:r,slug:n}=this.parseTitleSlug(location.pathname);if(!n)return;const s=_(e.tags)?.map(f=>f.split(",")).flat().map(f=>f.trim()).filter(Boolean),o=d(e.type),l=_(e.langs)?.map(f=>f.toLowerCase()),i=r||d(e.id),c=await this.getChapters(e.chapter,{lazy:!0,titleId:i,titleSlug:n})??[],u=await this.getValidImgSrc(e.img,t),g=u&&this.context.includeImgBytes?await nt(u):void 0,p=this.getFirstChapterUrl(),h=e.firstBtn;return{id:i||d(e.id),url:location.origin+location.pathname,slug:n,name:t,langs:l?.length?l:e.langs&&this.siteMeta.defaultLang?[this.siteMeta.defaultLang]:void 0,tags:this.getTagIdsFromNames([...s??[],...o?[o]:[]]),chapters:c,hasMoreChapters:e.hasMore?!!document.querySelector(e.hasMore):void 0,img:u,imgBytes:g,firstUrl:p,firstBtn:!p&&h&&document.querySelector(h)?h:void 0,trackers:this.getTrackersMap(e.trackers)}}getTrackersMap(e){if(!e)return;const t=d(e.mal),r=d(e.anl);if(!t||!r)return;const n={};return t&&(n.mal=t),r&&(n.anl=r),n}getFirstChapterUrl(){const e=d(this.spec.title?.first);if(e){if(e.startsWith("http"))return e;try{return new URL(e,location.href).href}catch{return}}}getValidImgSrc(e,t){return D(33,30,()=>{const r=d(e)||d(`img[alt="${t.replaceAll('"',"")}"]|[attr:data-src,attr-contain:src]`);return!r||r.startsWith("data:")?void 0:document.querySelector(`img[srcset*="${r}"]`)?r.split(" ")[0]:r})}getRawReaderTitleData(e){const t=this.spec.reader?.title;if(!t)return;const r=t.sel?document.querySelector(t.sel)??void 0:void 0,n=d(t.name,r);if(!n)return;const s=ot(d(t.img,r));if(e?.slug){let c=this.siteMeta.titleBase;e?.id&&(c=c.replace("{id}",e.id));const u=c.includes("{slug}");if(u&&(c=c.replace("{slug}",e.slug)),!c.includes("{")){c=u?c:`${c}/${e.slug}`;const g=this.siteMeta.trailing?"/":"",p=`${location.origin}/${c}${g}`;return{name:n,img:s,url:p,slug:e.slug,id:e.id||d(t.id)}}}const o=d(t.url,r),{slug:l,id:i}=this.parseTitleSlug(o);if(!(!n||!o||!l))return{name:n,img:s,url:o,slug:l,id:i||d(t.id)||e?.id}}async getRawReaderData(){const{spec:e,siteMeta:t}=this;if(!e?.reader||!await w.isReaderPage(e.reader,!!e.generic))return;const r=e.reader.content;if(!(!r||await w.verifyImgsCotainer(r)))return;const n=this.parseReaderSlug(t.readerBase,location.pathname,location.href),{slug:s,basePath:o,lang:l}=n,i=this.getRawReaderTitleData({id:n.titleId,slug:n.titleSlug});if(!i)return;const{id:c,slug:u}=i,g=e.reader?.chapter,p=!!this.context.disableLazyChapters,h=!!this.context.includeHiddenChapters,f=await this.getChapters(g,{titleId:c,titleSlug:u,lang:l,lazy:h||!p,includeHiddenChapters:h,timeoutMs:h?3e3:29e3,includeIndex:!0,basePath:o})??[],b=d(e.reader.label)?.toLowerCase().replace(i.name.toLowerCase(),"");if(!b)return;const{vol:m,chap:S=0}=O(b)||{},y=this.findNeighborChapter({sel:e.reader.prev,basePath:o,titleUrl:i.url}),B=this.findNeighborChapter({sel:e.reader.next,basePath:o,titleUrl:i.url});return this.finalizeRawReaderData({vol:m,chap:S,lang:l??d(e.reader.lang)?.toLowerCase()??(e.reader.lang?this.siteMeta.defaultLang:void 0),slug:s,basePath:o,group:d(e.reader.group),imgs:_(e.reader.imgs),title:{id:c||d(this.spec.reader?.title.id),url:i.url,slug:u,name:i.name,langs:l?[l]:void 0,img:i.img,chapters:f,hasMoreChapters:!f.length&&!h&&!!this.context.disableLazyChapters&&!!g?.label}},{prevSlug:y,nextSlug:B})}async getRawChaptersData(){const e=this.siteMeta.chapters;if(e===W.blank)return;const t=e===W.reader,r=!e||e===W.title,n=t?(await this.getRawReaderData())?.title:r?await this.getRawTitleData():void 0,s=this.spec.chapters?.chapter,o=s?await this.getChapters(s,{titleId:n?.id,titleSlug:n?.slug,lazy:this.spec.chapters?.lazy,includeHiddenChapters:!0,lang:this.context.lang}):n?.chapters;if(!o)return;const{lang:l}=this.context,i=l?o.filter(c=>!c.lang||c.lang===l):o;return{chapters:i,title:n?{...n,chapters:[]}:await this.getTitleData(this.spec.chapters?.title),hasMore:!1,asc:!1,total:i.length}}async getRawSearchData(){const e=this.spec.search,t=this.context.lang;if(!e)return;e.delay&&await te(e.delay);const r=e.title,{chapter:n}=r,s=[],o=e.lazy?e.empty||e.loading?550:100:1,l=await D(o,50,()=>{const i=Array.from(document.querySelectorAll(r.sel));if(i.length||e.empty&&document.querySelector(e.empty)||e.loading&&!document.querySelector(e.loading))return i});if(l)return await Promise.all(l.map(async i=>{const c=d(r.url,i),u=x(c),g=d(r.name,i),{slug:p,id:h}=this.parseTitleSlug(u);if(!u||!g||!p)return;const f=d(r.lang,i);f&&t&&f!==t||s.push({id:h||d(r.id,i),slug:p,name:g,img:d(r.img??"img|[attr:data-src,attr-contain:src]",i),lang:f,chapters:await this.getChapters(n,{root:i,titleId:h,titleSlug:p})??[]})})),{rawReleases:s}}async getChapters(e,{root:t,titleId:r,titleSlug:n,lang:s,includeHiddenChapters:o=!1,lazy:l=!0,timeoutMs:i,includeIndex:c,basePath:u}={}){const g=e?.sel;if(!g||!e.label)return;let p=null;if(e.trigger&&(!o||(p=document.querySelector(e.trigger),!p)))return;const h=[],f=await D((i??(l?1e4:50))/50,50,async()=>{p?.click(),await te(100);const R=Array.from((t??document.documentElement)?.querySelectorAll(g));if(R.length)return R}),b=(f??[]).map((R,z)=>({id:d(e.id,R),label:d(e.label,R),url:d(e.url,R),at:d(e.at,R),lang:d(e.lang,R),elIndex:z}));if(((e.dismiss?(t??document.body).querySelector(e.dismiss):void 0)??p)?.click(),!f?.length)return[];const m=b.map(({label:R})=>O(R)),S=m[1]?.chap;!m[0]&&(S===void 0||S<=1)&&(m[0]={chap:0});const y=u??lt(this.siteMeta.readerBase,{titleId:r,titleSlug:n,lang:s}),B=Date.now();return m.forEach((R,z)=>{if(!R)return;const{id:Q,url:v,at:Ta,lang:Pa,elIndex:Ca}=b[z],Ce=re(Ta,this.siteMeta.defaultLang),k={...R,id:Q,ts:Ce?Math.min(B,Ce):void 0};if(c&&(k.elIndex=Ca),v?.startsWith("#")){h.push(k);return}const Be=v?.startsWith("http")&&!v.includes(`//${location.hostname}/`),Y=Be?v:x(v);if(!Y){h.push(k);return}if(Be){h.push({...k,slug:Y});return}const{slug:Ba,lang:ja}=this.parseReaderSlug(y,Y,v);h.push({...k,slug:Ba,lang:ja||Pa?.toLowerCase()})}),N(h)}static async isReaderPage(e,t){const r=e.sel;return t&&!r?!1:!r||!!await P(r,{lazy:!!e.lazy})}static async verifyImgsCotainer(e){const t=e.split(",").map(r=>r.trim()).filter(Boolean).map(r=>`${r} img, ${r} canvas`).join(",");return!!await P(t,{lazy:!0,all:!1})}findNeighborChapter({sel:e,basePath:t,titleUrl:r}){const n=d(e);if(!n||n.startsWith("#")||n.startsWith("/#"))return;const s=x(n);if(s&&!(s===location.pathname||r===s||r===`${location.origin}${s}`))return this.parseReaderSlug(t,s,n).slug||void 0}finalizeRawReaderData(e,{prevSlug:t,nextSlug:r}={}){const n=e.title.chapters;if(!n.length){const c=O(t),u=O(r);return!c&&!u?e:{...e,prev:c?{...c,slug:t}:void 0,next:u?{...u,slug:r}:void 0}}let s,o,l,i;for(let c=0;c<n.length&&!(s&&(!t||l)&&!r&&i);c++){const u=n[c];!s&&(e.slug==u.slug||e.chap===u.chap&&(e.vol===u.vol||e.vol===void 0))?(s=u,o=c):!l&&t===u.slug?l=u:!i&&r===u.slug&&(i=u)}return o!==void 0&&(l??(l=n[o+1]),i??(i=n[o-1])),{...e,inferVol:s?.inferVol,prev:l,next:i}}}var yt=Object.defineProperty,vt=(a,e,t)=>e in a?yt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,bt=(a,e,t)=>(vt(a,typeof e!="symbol"?e+"":e,t),t);class se extends w{async getRawReaderData(){const e=`https://${location.host}`,[t,r]=await Promise.all([I(e,"api","manga","info"),I(e,"api","read","chapter")]),n=t?.value,s=r?.value;if(!n||!s)return;const o=this.parseReaderSlug(this.siteMeta.readerBase,location.pathname,location.href);if(!o)return;const l=O(s.readChapter?.title);if(l)return this.finalizeRawReaderData({basePath:o.basePath,slug:o.slug,...l,imgs:s.readChapter.pages.map(i=>new URL(i.image,location.origin).href),title:{url:`${e}/manga/${n.id}`,slug:n.id,name:n.title,tags:this.getTagIdsFromNames([n.type].filter(Boolean)),chapters:N(n.chapters.map(i=>({slug:i.id,chap:i.number})))}})}async getRawChaptersData(){const{titleSlug:e}=this.context;if(e)try{const t=await(await fetch(`${location.origin}/api/manga/info?mangaId=${e}`)).json();return{chapters:N(t.chapters.map(r=>({slug:r.id,chap:r.number})))}}catch{return}}}bt(se,"specId","atsu");var Rt=Object.defineProperty,$t=(a,e,t)=>e in a?Rt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,St=(a,e,t)=>($t(a,typeof e!="symbol"?e+"":e,t),t);class V extends w{parseTitleSlug(e){return{slug:x(e)?.split("/").filter(Boolean)[1]}}}St(V,"specId","bato");var xt=Object.defineProperty,Mt=(a,e,t)=>e in a?xt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,It=(a,e,t)=>(Mt(a,typeof e!="symbol"?e+"":e,t),t);class ie extends w{async getRawReaderData(){const e=await super.getRawReaderData();if(!e)return;const t=window.pages,r=t?.map(n=>n?.image).filter(Boolean);if(!(!Array.isArray(r)||!r.length))return{...e,imgs:r,isWebtoon:t.some(n=>n.height/n.width>2)}}}It(ie,"specId","dynasty");var Dt=Object.defineProperty,Tt=(a,e,t)=>e in a?Dt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Pt=(a,e,t)=>(Tt(a,typeof e!="symbol"?e+"":e,t),t);class oe extends w{async getRawChaptersData(){const e=this.context.titleSlug;if(!e)return;const t=`https://api.${location.host}/chapter/all/${e}`;return{chapters:(await(await fetch(t)).json()).map(Ct).filter(Boolean)}}}Pt(oe,"specId","lua");function Ct(a){if(!a||typeof a.chapter_name!="string")return;const e=O(a.chapter_name);if(e)return{...e,slug:typeof a.chapter_slug=="string"?a.chapter_slug:void 0,ts:typeof a.created_at=="string"?new Date(a.created_at).valueOf():void 0}}function le(a,e){const t=a[0]===e?a.substring(1):a;return t[t.length-1]===e?t.substring(0,t.length-1):t}var Bt=Object.defineProperty,jt=(a,e,t)=>e in a?Bt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Lt=(a,e,t)=>(jt(a,typeof e!="symbol"?e+"":e,t),t);class H extends w{async getRawReleasesData(){const e=this.detectNewSiteMeta(this.spec.releases,this.siteMeta);this.siteMeta=e??this.siteMeta;const t=await super.getRawReleasesData();if(t)return{...t,siteMeta:e}}async getRawTitleData(){const e=this.spec.title?.sel;if(e&&!await document.querySelector(e))return;const t=this.finalizeNewSiteMeta(this.siteMeta,{titleBase:this.extractBasePath(location.pathname)});this.siteMeta=t??this.siteMeta;const r=await super.getRawTitleData();if(r)return{...r,siteMeta:t}}async getRawReaderData(){const e=this.spec.reader?.sel;if(e&&!await document.querySelector(e))return;const t=ce(this.spec.reader?.title),r=t?this.finalizeNewSiteMeta(this.siteMeta,{titleBase:this.extractBasePath(x(t))}):void 0,n=await super.getRawReaderData();if(n)return{...n,siteMeta:r}}async getRawSearchData(){const e=ce(this.spec.search?.title);if(!e)return;const t=this.finalizeNewSiteMeta(this.siteMeta,{titleBase:this.extractBasePath(x(e))});this.siteMeta=t??this.siteMeta;const r=await super.getRawSearchData();if(r)return{...r,siteMeta:t}}detectNewSiteMeta(e,t){if(!e)return;const r=e.title,n=document.querySelector(r.sel)??void 0;if(!n)return;const s=x(d(r.url,n));if(s!==void 0)return this.finalizeNewSiteMeta(t,{titleBase:this.extractBasePath(s)})}finalizeNewSiteMeta(e,{titleBase:t}){if(e.titleBase!==t)return{...e,titleBase:t,readerBase:e.readerBase.replace(e.titleBase,t)}}extractBasePath(e){return le(e,"/").split("/").slice(0,-1).join("/")}}Lt(H,"specId","madara");function ce(a){if(!a)return;const e=a.sel?document.querySelector(a.sel)??void 0:void 0;return d(a.url,e)}var Ot=Object.defineProperty,Nt=(a,e,t)=>e in a?Ot(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,_t=(a,e,t)=>(Nt(a,typeof e!="symbol"?e+"":e,t),t);const At={a:.1,b:.2,c:.3,d:.4};class ue extends w{parseTitleSlug(e){return{slug:x(e)?.split("/").filter(Boolean)[1]}}async getRawReleasesData(){let e=[];try{e=(await(await fetch("https://api.mangadex.org/chapter?limit=96&offset=0&includes[]=manga&contentRating[]=safe&contentRating[]=suggestive&contentRating[]=erotica&contentRating[]=pornographic&order[readableAt]=desc")).json()).data}catch{return}const t=[];return e.forEach(({relationships:r,attributes:n,id:s})=>{const o=r.find(({type:g})=>g==="manga"),l=C(n.volume),i=C(n.chapter);if(i===void 0)return;const{title:c}=o.attributes,u=c.en??Object.values(c)[0];t.push({slug:o.id,name:u,chapters:[{slug:n.externalUrl||s,vol:l,chap:i,lang:n.translatedLanguage,ts:new Date(n.readableAt).valueOf()}]})}),super.finalizeRawReleasesData({rawReleases:t})}async getRawTitleData(){const e="https://api.mangadex.org/manga/",[t,r]=await Promise.all([I(e,M),I(e,M,"feed")]);if(!t||!r)return;const n=r.value.data?.map?.(i=>{const{attributes:c,id:u}=i;if(typeof c!="object"||typeof u!="string"||!u)return;const{externalUrl:g,title:p,volume:h,chapter:f,translatedLanguage:b}=c;return{slug:g||u,label:p||void 0,vol:C(h),chap:C(f),lang:b||"en",ts:new Date(c.readableAt).valueOf()}}).filter(i=>i?.chap!=null)??[],{data:s}=t.value;if(!s)return;const o=de({data:s,getTagIdsFromNames:i=>this.getTagIdsFromNames(i)});if(!o)return;const l=this.context.includeImgBytes&&o.img?await ae(o.img):void 0;return{...o,imgBytes:l,chapters:N(n),hasMoreChapters:(r.value.total||0)>(r.value.limit||0)}}async getRawReaderData(){const e="https://api.mangadex.org/",[t,r,n]=await Promise.all([I(e,"chapter",M),I(e,"at-home","server",M),I(e,"manga",M,"aggregate")]);if(!t||!r||!n)return;const s=t.value.data,{volume:o,chapter:l,externalUrl:i,translatedLanguage:c}=s.attributes||{},{baseUrl:u,chapter:{data:g,dataSaver:p,hash:h}}=r.value,f=s.relationships?.find?.(v=>v.type==="manga");if(!f)return;const b=de({data:f,getTagIdsFromNames:v=>this.getTagIdsFromNames(v)});if(!b||typeof n.value.volumes!="object")return;const m=ge(n.value)??[];(typeof l!="string"||l==="none")&&!m.length&&m.push({chap:0,slug:s.id});const S=m.findIndex(v=>v.slug===s.id),y=s.relationships?.find?.(v=>v.type==="scanlation_group"),B=u.endsWith("/")?u:u+"/",R=!!localStorage.getItem("md")?.includes?.('"dataSaver":true'),z=`${B}${R?"data-saver":"data"}/`,Q=((R?p:g)??[]).map?.(v=>`${z}${h}/${v}`)??[];return{externalUrl:i,vol:C(o),inferVol:m[S]?.inferVol,chap:C(l)||0,imgs:Q,lang:c,slug:s.id,prev:m[S+1],next:m[S-1],basePath:"/chapter/",groupName:y?.attributes?.name,groupUrl:y?.attributes?.website,isWebtoon:f?.attributes?.tags?.some(v=>v.attributes.name.en==="Long Strip"),title:{...b,chapters:m}}}async getRawChaptersData(){const{titleSlug:e}=this.context,t=this.context.lang||"en";let r;try{const n=await fetch(`https://api.mangadex.org/manga/${e}/aggregate?translatedLanguage[]=${t}`);r=ge(await n.json())}catch{return}if(r)return{chapters:r,lang:t,asc:!1,hasMore:!1,total:r.length}}}_t(ue,"specId","mangadex");function C(a){if(typeof a!="string"||a==="none")return;const e=parseFloat(a);if(e!==e)return;const t=a[a.length-1];return e+(At[t]??0)}function ge(a){if(typeof a.volumes!="object")return;const e=Object.values(a.volumes).map(({volume:t,chapters:r})=>{const n=C(t);return Object.values(r).map(({id:s,chapter:o})=>{const l=C(o);if(l!==void 0)return{vol:n,chap:l,slug:s}})}).flat().filter(Boolean).reverse();return N(e)}function de({data:a,getTagIdsFromNames:e}){const{id:t,attributes:r,relationships:n}=a;if(!t||typeof t!="string"||typeof r!="object")return;const{title:s,availableTranslatedLanguages:o,altTitles:l,tags:i,contentRating:c}=r;if(typeof s!="object"||o&&!Array.isArray(o))return;const u=Object.values(s)[0];if(!u||typeof u!="string")return;const g=zt(),p=(o??[])?.map?.(y=>typeof y=="string"?y:void 0).filter(Boolean)??[],h=p.filter(y=>y&&(!g||g.includes(y))),f=l?.map?.(y=>{const[[,B]=[]]=Object.entries(y);return B}),b=n?.find?.(y=>y.type==="cover_art")?.attributes?.fileName,m=b?`https://mangadex.org/covers/${t}/${b}.256.jpg`:void 0,S=(i||[]).map(y=>y?.attributes?.name?.en).concat(c).filter(Boolean);return{url:`${location.origin}/title/${t}`,slug:t,name:u,altNames:f,langs:h.length>0?h:p.length>0?p:["en"],img:m,tags:e(S)}}function zt(){const a=localStorage.getItem("md");if(a)try{const e=JSON.parse(a)?.userPreferences?.filteredLanguages;return e?.length?e:void 0}catch{return}}var kt=Object.defineProperty,Wt=(a,e,t)=>e in a?kt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Et=(a,e,t)=>(Wt(a,typeof e!="symbol"?e+"":e,t),t);class pe extends w{async getRawReaderData(){if((await P(".current-viewtype",{lazy:!0,all:!1}))?.textContent?.trim().toLowerCase()!=="volume")return await super.getRawReaderData()}async getRawChaptersData(){const e=this.context.lang??"en",t=await P(`.tab-content[data-name="chapter"] a.dropdown-item[data-code="${e.toUpperCase()}"]`,{lazy:!0,all:!1});if(t)return t.click(),await P(`.tab-content[data-name="chapter"] li.item[data-number] a[href*="/${e}/"]`,{lazy:!0,all:!1}),await super.getRawChaptersData()}async getRawSearchData(){const e=await super.getRawSearchData();if(!e)return;const t=this.context.lang??"en";return{...e,rawReleases:e.rawReleases.map(r=>({...r,lang:r.lang??t}))}}}Et(pe,"specId","mangafire");var Ut=Object.defineProperty,qt=(a,e,t)=>e in a?Ut(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Ft=(a,e,t)=>(qt(a,typeof e!="symbol"?e+"":e,t),t);class he extends w{async getRawReaderData(){const e=await super.getRawReaderData();return e&&{...e,imgs:await this.getImgs()}}parseReaderSlug(e,t){const{slug:r,basePath:n}=super.parseReaderSlug(e,t),s=r.split("/").filter(Boolean),o=s[s.length-1];return{basePath:n,slug:o.startsWith("pg-")?s.slice(0,-1).join("/"):r}}async getImgs(){const e=await D(100,20,()=>window.imgsrcs),t=window.CryptoJS,r=t.enc.Hex.parse("e11adc3949ba59abbe56e057f20f883e"),n={iv:t.enc.Hex.parse("1234567890abcdef1234567890abcdef"),padding:t.pad.ZeroPadding};return t.AES.decrypt(e,r,n).toString(t.enc.Utf8).split(",")}}Ft(he,"specId","mangago");var Vt=Object.defineProperty,Ht=(a,e,t)=>e in a?Vt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Jt=(a,e,t)=>(Ht(a,typeof e!="symbol"?e+"":e,t),t);class fe extends w{async getRawTitleData(){const e=`https://backend.${location.host}`,t=await I(e,"chapters-with-ids",M,M),r=await super.getRawTitleData();if(!(!t?.value||!r))return{...r,langs:await Qt(),chapters:J(t.value)}}async getRawChaptersData(){const{titleSlug:e,lang:t}=this.context;if(e)try{const r=await fetch(`https://backend.${location.host}/chapters-with-ids/${e}/${t??"en"}`);return{chapters:J(await r.json())}}catch{return}}async getRawReaderData(){const e=`https://backend.${location.host}`,[t,r]=await Promise.all([I(e,"chapters-with-ids",M,M),I(e,"read",M)]);if(!t?.value||!r?.value?.length)return;const n=await super.getRawReaderData();if(!n)return;const s=new URLSearchParams(location.search).get("number")??"0";return{...n,slug:`${n.slug}?number=${s}`,imgs:r.value,title:{...n.title,chapters:J(t.value)}}}}Jt(fe,"specId","mangahaven");async function Qt(){const a=document.querySelector('[role="tabpanel"] button');if(!a)return;const e=document.createElement("style");e.innerHTML="[data-radix-popper-content-wrapper] { display: none !important; }",document.head.appendChild(e),a.click();const t=await D(50,10,()=>_('img[src*="/flags/"]|attr:src|pattern:.+/(.+).svg'));return a.click(),setTimeout(()=>document.head.removeChild(e),1e3),t}function J(a){const e=[];return a?.forEach?.(t=>{const r=+t.chapter;isNaN(r)||!t.id||e.push({chap:r,slug:`${t.id}?number=${t.chapter}`,lang:t.lang?.toLowerCase?.()})}),e}var Yt=Object.defineProperty,Gt=(a,e,t)=>e in a?Yt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Zt=(a,e,t)=>(Gt(a,typeof e!="symbol"?e+"":e,t),t);class me extends V{}Zt(me,"specId","mangapill");var Kt=Object.defineProperty,Xt=(a,e,t)=>e in a?Kt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,ea=(a,e,t)=>(Xt(a,typeof e!="symbol"?e+"":e,t),t);class we extends w{async getRawTitleData(){const e=await super.getRawTitleData();return e&&{...e,chapters:e.chapters.map(t=>({...t,slug:t.slug?.split("/").filter(Boolean).slice(-1)[0]}))}}}ea(we,"specId","mangaplus");var ta=Object.defineProperty,aa=(a,e,t)=>e in a?ta(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,ra=(a,e,t)=>(aa(a,typeof e!="symbol"?e+"":e,t),t);class ye extends H{async getRawReaderData(){const e=await super.getRawReaderData();if(e)return{...e,title:{...e.title,id:await this.getReaderTitleId()}}}async getReaderTitleId(){const e=await window.HISTORY?.getStored?.();if(!e||typeof e!="object")return;const t=Object.values(e).filter(Boolean);if(!t.length)return;t.sort((n,s)=>s.time-n.time);const r=t[0].manga_ID;return typeof r=="string"?r:typeof r=="number"?r+"":void 0}detectNewSiteMeta(e,t){if(this.siteId==="realm"||!e)return;const r={...t,releases:le(location.pathname,"/")},n=e.title,s=document.querySelector(n.sel)??void 0;if(!s)return;const o=x(d(n.url,s));if(o===void 0)return;const l=s.querySelector(n.chapter.sel)??void 0;if(!(!l||x(d(n.chapter.url,l))===void 0))return r.titleBase=this.extractBasePath(o),t.titleIdType===U.id&&(d(n.id,s)||(t.titleIdType=U.name)),this.finalizeNewSiteMeta(t,r)}finalizeNewSiteMeta(e,t){if(this.siteId==="realm")return;const r=Object.keys(t),n={...e};let s=!1;return r.forEach(o=>{const l=t[o];l!==e[o]&&(n[o]=l,s=!0)}),s?n:void 0}}ra(ye,"specId","mangastream");var na=Object.defineProperty,sa=(a,e,t)=>e in a?na(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,ia=(a,e,t)=>(sa(a,typeof e!="symbol"?e+"":e,t),t);class ve extends w{async getRawReaderData(){const e=await super.getRawReaderData();return e&&{...e,slug:e.slug.split("/").slice(0,-1).join("/")}}}ia(ve,"specId","mangaworld");var oa=Object.defineProperty,la=(a,e,t)=>e in a?oa(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,ca=(a,e,t)=>(la(a,typeof e!="symbol"?e+"":e,t),t);class be extends w{async getRawTitleData(){const e=await super.getRawTitleData();if(e)return{...e,hasMoreChapters:e.chapters.length===50}}}ca(be,"specId","mgeko");var ua=Object.defineProperty,ga=(a,e,t)=>e in a?ua(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,da=(a,e,t)=>(ga(a,typeof e!="symbol"?e+"":e,t),t);class Re extends E{async getRawReleasesData(){}async getRawTitleData(){const e=await $e();if(!e)return;const t=d("#cover img|[attr:data-src,attr-contain:src]");return{...e,img:t}}async getRawReaderData(){const e=await $e();if(!e)return;const t=d("#image-container img|[attr:data-src,attr-contain:src]"),r=q(t);if(!r)return;const n=r.pathname.split("/").filter(Boolean).slice(0,-1).join("/"),s=`${r.origin}/${n}/`,o=r.pathname.split("?")[0].split("#")[0].split(".").slice(-1)[0]||"webp";return{chap:0,slug:"1",basePath:e.url.replace(location.origin,"").slice(1),imgs:Array.from({length:e.totalImgs},(l,i)=>`${s}${i+1}.${o}`),title:{name:e.name,slug:e.slug,url:e.url,chapters:[{slug:"1",chap:0}]}}}async getRawChaptersData(){const e=await this.getRawTitleData();if(!e)return;const{chapters:t,...r}=e;return{title:{...r,chapters:[]},chapters:t}}}da(Re,"specId","nhentai");async function $e(){const a=await D(100,20,()=>window._gallery);if(!a?.id||!a?.title||!a?.images?.pages)return;const{title:e,images:{pages:t,cover:r},media_id:n}=a;return{name:e.pretty??e.english??e.japanese,slug:a.id+"",url:`${location.origin}/g/${a.id}`,chapters:[{slug:"1",chap:0}],totalImgs:t.length,img:await pa(n,r.t)}}async function pa(a,e){if(!a||!e)return;const t={j:"jpg",p:"png",g:"gif",w:"webp"}[e];if(!t)return;const r=(await D(10,20,()=>window._n_app))?.options?.thumb_cdn_urls?.[0];if(r)return`https://${r}/galleries/${a}/cover.${t}`}var ha=Object.defineProperty,fa=(a,e,t)=>e in a?ha(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,ma=(a,e,t)=>(fa(a,typeof e!="symbol"?e+"":e,t),t);class Se extends w{async getRawChaptersData(){const e=this.context.titleSlug;if(!e)return;const t=`https://api.${location.host}/api/post/chapters?postSlug=${e}`;return{chapters:(await(await fetch(t)).json()).map(wa).filter(Boolean)}}}ma(Se,"specId","qi");function wa(a){if(!(!a||typeof a.number!="number"))return{chap:a.number,slug:typeof a.slug=="string"?a.slug:void 0,ts:typeof a.createdAt=="string"?new Date(a.createdAt).valueOf():void 0}}var ya=Object.defineProperty,va=(a,e,t)=>e in a?ya(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,ba=(a,e,t)=>(va(a,typeof e!="symbol"?e+"":e,t),t);class xe extends w{async getRawTitleData(){const e=await super.getRawTitleData();if(!e)return;const t=_(".info-detail__row > .genre-btn,.info__right .stats__row:first-child|text")?.map(r=>[r,...r.split(" ")]).flat();return Me({...e,tags:this.getTagIdsFromNames(t)??[]},".episode-header .episode-cnt")}async getRawReaderData(){const e=await super.getRawReaderData();if(!e)return;const t=`${location.origin}/series/${e.title.slug}/info`;return{...e,title:{...Me({...e.title,url:t,tags:[]},".episode-list .js-ep-cnt"),hasMoreChapters:!1}}}async getRawChaptersData(){const{rawId:e,skip:t}=this.context,r=1e3,n=t?Math.floor(t/1e3)+1:1;try{const s=await fetch(`/series/${e}/episodes?page=${n}&sort=NEWEST&max_limit=${r}`);return Ra(await s.json())}catch{return}}parseTitleSlug(e){if(!e)return{};const t=e.split("/").filter(Boolean);return{slug:t[1]??t[0]}}}ba(xe,"specId","tapas");function Me(a,e){const t=$a(e)>20;return{...a,chapters:t?[]:a.chapters,hasMoreChapters:t}}function Ra(a){const e=a?.data?.episodes;if(!Array.isArray(e))return;const t=e.map(n=>({chap:n.pending_scene??n.scene,slug:n.id+"",ts:new Date(n.publish_date)?.valueOf?.()||void 0})),r=a?.data?.pagination;return{chapters:t,total:r?.total??t.length,hasMore:!!r?.has_next}}function $a(a){return+(document.querySelector(a)?.textContent?.trim().split(" ")[0]||0)}var Sa=Object.defineProperty,xa=(a,e,t)=>e in a?Sa(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Ma=(a,e,t)=>(xa(a,typeof e!="symbol"?e+"":e,t),t);class Ie extends w{async getRawTitleData(){const e=new URLSearchParams(location.search),t=e.get("episode_no"),r=e.get("title_no");if(t||!r)return;const n=await super.getRawTitleData();if(!n)return;const s=location.hostname.startsWith("m."),o=location.pathname.split("/")[1];return{...n,slug:`${n.slug}?title_no=${r}`,id:r,langs:o?[o]:void 0,chapters:s?[]:n.chapters.map(l=>({...l,lang:o})),hasMoreChapters:s||(document.querySelector(".paginate")?.childElementCount??1)>1}}async getRawReaderData(){const e=new URLSearchParams(location.search),t=e.get("episode_no"),r=e.get("title_no"),n=t?+t:void 0;if(!t||!r||typeof n!="number"||isNaN(n))return;const s=document.title.split("|")[1]?.trim();if(!s)return;const o=location.pathname.split("/"),l=`${o.slice(0,4).join("/")}/list?title_no=${r}`,i=await this.getChapters({sel:"#sequence_scroll li.eg-flick-panel,#toolbar .episode_lst li[data-episode-no]",url:"a|attr:href",label:"|attr:data-episode-no || a|attr:href|pattern:.+episode_no=(\\d+).*"},{lazy:!1,titleId:r,titleSlug:l}),c=o[1];return{chap:n,lang:c,slug:`${location.pathname}?title_no=${r}&episode_no=${t}`,basePath:"",imgs:await this.getReaderImgs(),isWebtoon:!0,title:{id:r,url:l,slug:l,name:s,langs:[c],chapters:(i??[]).map(u=>({...u,lang:c})),hasMoreChapters:!1}}}async getReaderImgs(){const e=_("#_imageList img|[attr:data-url,attr:src]");return e?.length?e:await D(100,50,()=>window.__viewerState__?.scrollViewerParam?.imageList?.map(({url:t})=>t).filter(Boolean))}parseReaderSlug(e,t,r){if(!r)return{basePath:"",slug:t};if(r.startsWith("http://")||r.startsWith("https://")){const n=q(r);return{basePath:"",slug:n.pathname+n.search}}return{basePath:"",slug:r}}}Ma(Ie,"specId","webtoon");const Ia=[se,V,ie,oe,H,ue,pe,he,fe,me,we,ye,be,ve,Re,Se,xe,Ie];function De(a){const e=Ia.find(t=>t.specId===a.spec.id)??w;return new e(a)}async function Da(a){const{spec:e}=a,t=a.siteMeta??e?.meta;if(e&&t){const r=a.type?[a.type]:Te(t,e.generic);if(!r.length)return;const n=De({...a,spec:e,siteMeta:t});return await L(r.map(s=>n.getRawPageByType(s,r.length>1)))}return await L((a.genericSpecs??[]).map(r=>{if(!r.meta||!r.generic)return[];const n=Te(r.meta,r.generic);if(!n.length)return[];const s=De({...a,spec:r,siteMeta:r.meta});return n.map(o=>s.getRawPageByType(o,!0))}).flat())}function Te(a,e){if(location.pathname==="/")return[];const{titleBase:t,readerBase:r}=a,n=location.pathname.split("/").filter(Boolean),s=Pe(n,r),o=Pe(n,t);if(s&&o)return[$.reader,$.title];const l=[];return!o&&(s!==!1||e)&&l.push($.reader),!s&&(o!==!1||e)&&l.push($.title),!l.length&&e?[$.reader,$.title]:l}function Pe(a,e){if(!e)return;const t=e.split("/").filter(Boolean),r=t.indexOf("{slug}"),n=r===t.length-1,s=!n&&r!==-1;if(n&&(t.pop(),!t.length))return;const o=a.length-t.length;if(s?o<0:o<=0)return!1;let l=!1;for(let i=0;i<t.length;i++){const c=t[i];if(c[0]!=="{"){if(c!==a[i])return!1;l=!0}}if(l&&o===(s?0:1))return!0}j.PageType=$,j.scrape=Da});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "trackkun-dom",
3
3
  "author": "endyquang",
4
- "version": "2.7.1",
4
+ "version": "2.7.2",
5
5
  "license": "UNLICENSED",
6
6
  "description": "MP DOM parser & configurations",
7
7
  "main": "index.js",