trackkun-dom 1.3.1 → 1.3.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 (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(T,P){typeof exports=="object"&&typeof module<"u"?P(exports):typeof define=="function"&&define.amd?define(["exports"],P):(T=typeof globalThis<"u"?globalThis:T||self,P(T._trackkun_={}))})(this,function(T){"use strict";function P(a){let e=!1;return new Promise((t,r)=>{Promise.all(a.map(async s=>{const n=await s;!e&&n&&(e=!0,t(n))})).then(()=>{e||t(void 0)})})}function q(a,{removeTrailingSlash:e=!0}={}){if(!a)return;const t=e&&a.endsWith("/")?a.slice(0,-1):a;try{return new URL(t)}catch{return}}function $(a){if(!(!a||typeof a!="string"))return a.startsWith("http://")||a.startsWith("https://")?q(a)?.pathname:a.startsWith("//")?q(`https:${a}`)?.pathname:a}async function I(a,e,t){const r=await t(()=>{a=0});if(r!==void 0)return r;if(!(a<=0))return await new Promise(s=>{setTimeout(async()=>{const n=await I(a-1,e,t);s(n)},e)})}async function x(a,e,t=0){const r=e.root??document.documentElement,s=e.timeoutMs??1e4;return I(e.lazy===!0?s/50:0,50,()=>{const n=e.all===!0?Array.from(r.querySelectorAll(a)):r.querySelector(a)??void 0;return(e.all?!n?.length:!n)?void 0:n})}const Te={text:Pe,attr:Be,"attr-contain":Ne,value:Oe,row:je};function g(a,e={}){if(!a)return;const{root:t=document.documentElement,returnAll:r}=e,s=a.split("||").map(u=>u.trim()).filter(u=>!!u&&u.includes("|"));if(s.length>1){for(let u=0;u<s.length;u+=1){const h=g(s[u],e);if(h?.length)return h}return}const[n,i]=a.split("|");if(!i)return;const l=(i?.startsWith("[")&&i.endsWith("]")?i.substring(1,i.length-1).split(","):[i]).map(u=>{const h=u.indexOf(":"),p=h!==-1;return{action:p?u.substring(0,h):u,param:p?u.substring(h+1):""}}),o=n?Array.from(t.querySelectorAll(n)):[t];if(!o.length)return r?[]:void 0;const c=[];for(const u of o)for(const h of l){const p=Te[h.action],d=p(u,h.param);if(d){if(r){c.push(d);break}return d}}return r?c:void 0}function Pe(a){return Array.from(a.childNodes).filter(e=>e.nodeType===3).map(e=>B(e.textContent)).filter(Boolean).join(" ").trim()||B(a.textContent)}function Be(a,e){return B(a.getAttribute(e))}function Ne(a,e){let t=a.getAttribute(e);if(!t){const r=a.getAttributeNames().find(s=>s.includes(e));r&&(t=a.getAttribute(r))}return B(t)}function Oe(a){return a.value}function je(a,e){if(!e)return;const t=B(a.textContent)?.toLowerCase(),r=e.toLowerCase();if(!(t!==r&&t!==`${r}:`))return B(a.nextElementSibling?.textContent??a.nextSibling?.textContent)}function B(a){if(a)return a?.replace(/(\n|\t)/g," ").trim()||void 0}var Le=(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))(Le||{}),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||{}),F=(a=>(a.blank="about:blank",a.title="meta.title",a.reader="meta.reader",a))(F||{});const ze=/(vol(ume)?|season)(\s*|-|\.)(\d+)/i,ke=/(ch(ap(t(er)?|\.)?|\.)?|^#|episode\.?|capitolo\.?|capitulo\.?|bölüm\.?)(\s*|-)(\d+([_-~,.]\d+)?)/i,_e=/\d+([_-~,.]\d+)?/,Ee=/[_-~,]/;function L(a){if(!a||!a)return;if(!isNaN(+a))return{chap:+a};const e=a.match(ze),t=e?.[0]?a.replace(e[0],"").trim():a,r=t.match(ke),s=t.match(_e),n=r?.[6],i=n??s?.[0];if(!i)return;const l=+i.replace(Ee,".");if(isNaN(l))return;const o=e?.[4];return{vol:o&&!isNaN(+o)&&a.indexOf(e[0])<a.indexOf(n?r[0]:s[0])?+o:void 0,chap:l}}function N(a){return a.sort((e,t)=>e.vol===void 0||t.vol===void 0?t.chap-e.chap:t.vol-e.vol||t.chap-e.chap),We(a)}function We(a){const e={};for(let t=a.length-1;t>=0;t--){const r=a[t],s=r.lang??"";r.vol!==void 0?e[s]=r.vol:e[s]!==void 0&&(r.inferVol=e[s])}return a}const qe=[{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:"ann",it:"anno",es:"a\xF1o"}}];function Y(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 s=new Date(t);if(s instanceof Date){const c=s.valueOf();if(!isNaN(c))return s.getHours()===0&&s.getMinutes()===0?Math.min(r,c+432e5):c}const n=qe.find(c=>e&&c.locales[e]&&t.indexOf(c.locales[e])!==-1?!0:t.indexOf(c.locales.en)!==-1);if(!n)return;const i=t.split(" ").filter(Boolean),l=Q(i)??Q(i,["a","an"]);if(!l)return;const o=r-l*n.seconds*1e3;return o>0?o:void 0}function Q(a,e){for(let t=0;t<a.length;t++){const r=a[t];if(e?.includes(r))return 1;const s=+r;if(s)return s<0?void 0:s}}function Z(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 K(a,{titleSlug:e,titleId:t}){if(!a)return"/";let r=a.replace("{titleSlug}",e);t&&(r=r.replace("{titleId}",t));const s=r.endsWith("/")?r:r+"/";return s.startsWith("/")?s:"/"+s}function Ue(a,e){const t=[...e],r=[];let s=!1,n=0;const i=Math.min(a.length,100);for(let o=0;o<i;o++){if(n>=10/2){const d=10-r.length;if(d>0){const f=o+d<=a.length?a.slice(o,o+d):t.slice(0,d);r.push(...f)}break}const c=a[o],u=c.id!==void 0,h=t.findIndex(d=>u&&d.id===c.id||d.slug===c.slug),p=h===-1?void 0:t.splice(h,1)[0];!p||p.chapters[0]?.chap!==c.chapters[0]?.chap?(s=!0,r.push({...c,changed:!0})):(n++,r.push(c))}if(!s)return[];if(r.length<=10)return r;const l=[];for(let o=0;o<r.length;o++){const c=r[o];(c.changed||o<10)&&l.push(c)}return l}function Fe(a,e){const t={};return a.forEach(r=>{const s=r.chapters.reduce((n,i)=>{const l=i.lang||e||"";return n[l]||(n[l]=[]),n[l].push(i),n},{});Object.entries(s).forEach(([n,i])=>{const l=`${r.slug}:${n}`;t[l]?(t[l].chapters.push(...i),N(t[l].chapters)):t[l]={...r,lang:n===""?void 0:n,chapters:i}})}),Object.values(t)}var R=(a=>(a.title="title",a.reader="reader",a.releases="releases",a.chapters="chapters",a.search="search",a))(R||{}),Ve=Object.defineProperty,He=(a,e,t)=>e in a?Ve(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,D=(a,e,t)=>(He(a,typeof e!="symbol"?e+"":e,t),t);class z{constructor(e){D(this,"spec"),D(this,"siteMeta"),D(this,"tags"),D(this,"context"),D(this,"methodsMap",{[R.title]:()=>this.getRawTitleData(),[R.reader]:()=>this.getRawReaderData(),[R.releases]:()=>this.getRawReleasesData(),[R.search]:()=>this.getRawSearchData(),[R.chapters]:()=>this.getRawChaptersData()}),D(this,"normalizedTagsMap"),this.spec=e.spec,this.siteMeta=e.siteMeta,this.tags=e.tags,this.context=e.context}async getRawSearchData(){throw new Error("Unimplemented")}async getRawPageByType(e,t=!1){const r=await this.methodsMap[e](),s=!r&&Ge(this.spec);if(t&&!r&&!s)return;const n=location.origin+location.pathname;return{type:e,is404:s,specId:this.spec.id,siteName:g(this.spec.name),url:n,data:r,spec:this.spec,context:this.context}}parseReaderSlug(e,t,r){const s=t.endsWith("/")?t.slice(0,-1):t;if(e.includes("{")){const n=e.split("/").filter(Boolean),i=s.split("/").filter(Boolean);if(n.length<i.length){const l=i[n.indexOf("{lang}")],o=i[n.indexOf("{titleId}")],c=i[n.indexOf("{titleSlug}")],u=e.replace("{lang}",l).replace("{titleId}",o).replace("{titleSlug}",c);if(s.startsWith(u))return{basePath:u,lang:l.toLowerCase(),titleId:o,titleSlug:c,slug:s.replace(u,"")}}}else if(s.startsWith(e))return{basePath:e,slug:s.replace(e,"")};return{basePath:"",slug:s[0]==="/"?s.substring(1):s}}parseTitleSlug(e){if(typeof e!="string")return{};const t=$(e),r=t?.split("/").filter(Boolean);if(!r?.length)return{};const s=this.siteMeta.titleBase.split("/").filter(Boolean),n=s.indexOf("{slug}");return(n===-1?r.length-s.length>=1:r.length===s.length)?{id:r[s.indexOf("{id}")],slug:n===-1?r.slice(s.length).join("/"):r[n]}:{slug:t}}finalizeRawReleasesData(e){const t=this.spec.releases?.title?.lang?this.siteMeta.defaultLang:void 0,r=Fe(e.rawReleases,t);if(r.length)return{rawReleases:this.context?.oldRawReleases?Ue(r,this.context.oldRawReleases):r}}getTagIdsFromNames(e){if(!e?.length)return;const t=this.normalizedTagsMap??(this.normalizedTagsMap=Je(this.tags)),r=e.map(s=>t[V(s)]).filter(Boolean);return r.length===0?void 0:Array.from(new Set(r)).sort((s,n)=>s-n)}}D(z,"specId"),D(z,"siteId");function Je(a){const e={};return a.forEach(({id:t,name:r,altNames:s})=>{e[V(r)]=t,s&&s.forEach(n=>{e[V(n)]=t})}),e}function V(a){const e=a.toLowerCase().replaceAll(" ","").replaceAll("-","");return e[e.length-1]==="s"?e.substring(0,e.length-1):e}function Ge(a){return a[404]&&document.querySelector(a[404])?!0:document.title.toLowerCase().includes("not found")}class w extends z{async getRawReleasesData(){if(!this.spec?.releases?.title)return;const{chapter:e,...t}=this.spec.releases.title,r=await x(t.sel,{lazy:!0,all:!0});if(!r?.length)return;const s=r.slice(0,100).map(i=>{const l=g(t.url,{root:i}),o=$(l),c=g(t.name,{root:i}),u=g(t.at,{root:i});if(!(!o||!c))return{titleEl:i,id:g(t.id,{root:i}),path:o,name:c,lang:g(t.lang,{root:i})?.toLowerCase(),at:Y(u,this.siteMeta.defaultLang)}}).filter(Boolean);if(!s.length)return;const n=[];return await Promise.all(s.map(async i=>{const{path:l,titleEl:o,lang:c,at:u,...h}=i,{id:p,slug:d}=this.parseTitleSlug(l);if(!d)return;const f=h.id||p,b=await this.getChapters(e,{root:o,titleId:f,titleSlug:d})??[];b.length&&n.push({slug:d,chapters:c||u?b.map(y=>({...y,lang:y.lang??c,ts:y.ts??u})):b,...h,id:f})})),this.finalizeRawReleasesData({rawReleases:n})}async getRawTitleData(){const e=this.spec.title;if(!e||e.sel&&!await x(e.sel,{lazy:!!e.lazy}))return;const t=g(e.name);if(!t)return;const{id:r,slug:s}=this.parseTitleSlug(location.pathname);if(!s)return;let n=g(e.tags,{returnAll:!0})??[];n.length===1&&(n=n[0].split(",").map(u=>u.trim()).filter(Boolean));const i=g(e.type),l=g(e.langs,{returnAll:!0})?.map(u=>u.toLowerCase()),o=r||g(e.id),c=await this.getChapters(e.chapter,{lazy:!0,titleId:o,titleSlug:s})??[];return{id:o||g(e.id),url:location.origin+location.pathname,slug:s,name:t,langs:l?.length?l:e.langs&&this.siteMeta.defaultLang?[this.siteMeta.defaultLang]:void 0,tags:this.getTagIdsFromNames([...n??[],...i?[i]:[]]),chapters:c,img:e.img?await this.getValidImgSrc(e.img):void 0,firstUrl:g(e.first)}}getValidImgSrc(e){return I(33,30,()=>{const t=g(e);return t&&!t.startsWith("data:")?t:void 0})}async getRawReaderData(){const{spec:e,siteMeta:t}=this;if(!e?.reader||e.generic&&!await w.isReaderPage(e.reader))return;const r=e.reader.content;if(!(!r||await w.verifyImgsLocator(r)))return;const s=e.reader.title,n=document.querySelector(s.sel);if(!n)return;const i=g(s.name,{root:n}),l=g(s.url,{root:n}),{slug:o,id:c}=this.parseTitleSlug(l),u=g(s.img,{root:n});if(!i||!l||!o)return;const h=c||g(s.id),p=!!this.context?.disableLazyChapters,d=await this.getChapters(e.reader?.chapter,{titleId:h,titleSlug:o,lazy:!p,timeoutMs:12e4})??[],f=g(e.reader.label)?.toLowerCase().replace(i.toLowerCase(),"");if(!f)return;const{vol:b,chap:y=0}=L(f)||{},{slug:v,basePath:m,lang:C,titleId:M}=this.parseReaderSlug(K(t.readerBase,{titleId:h,titleSlug:o}),location.pathname,location.href);return this.finalizeRawReaderData({vol:b,chap:y,lang:C??g(e.reader.lang)?.toLowerCase()??(e.reader.lang?this.siteMeta.defaultLang:void 0),slug:v,basePath:m,imgsLocator:e.reader.imgs,title:{id:h||M||g(s.id),url:l,slug:o,name:i,langs:C?[C]:void 0,img:Z(u),chapters:d,hasMoreChapters:!!e.reader?.chapter&&!d.length&&p}},{prevSlug:this.findNeighborChapter({sel:e.reader.prev,basePath:m}),nextSlug:this.findNeighborChapter({sel:e.reader.next,basePath:m})})}async getRawChaptersData(){const e=this.siteMeta.chapters;if(e===F.blank)return;const t=e===F.reader?(await this.getRawReaderData())?.title:await this.getRawTitleData();if(!t)return;const r=this.context?.lang,{chapters:s}=t,n=r?s.filter(i=>!i.lang||i.lang===r):s;return{chapters:n,title:{...t,chapters:[]},hasMore:!1,asc:!1,total:n.length}}async getRawSearchData(){const e=this.spec.search?.title;if(!e)return;const{chapter:t}=e,r=[];return await Promise.all(Array.from(document.querySelectorAll(e.sel)).map(async s=>{const n=g(e.url,{root:s}),i=$(n),l=g(e.name,{root:s}),{slug:o,id:c}=this.parseTitleSlug(i);!i||!l||!o||r.push({id:c,slug:o,name:l,chapters:await this.getChapters(t,{root:s,titleId:c,titleSlug:o})??[]})})),r.length?{rawReleases:r}:void 0}async getChapters(e,{root:t=document.documentElement,titleId:r="",titleSlug:s="",lazy:n=!0,timeoutMs:i}){if(!e)return;const l=[],o=await x(e.sel,{root:t,all:!0,lazy:n,timeoutMs:i});if(!o?.length)return l;const c=(o??[]).map((f,b)=>({id:g(e.id,{root:f}),label:g(e.label,{root:f}),url:g(e.url,{root:f}),at:g(e.at,{root:f}),elIndex:b})),u=c.map(({label:f})=>L(f)),h=u[1]?.chap;!u[0]&&(h===void 0||h<=1)&&(u[0]={chap:0});const{readerBase:p}=this.siteMeta,d=K(p,{titleId:r,titleSlug:s});return u.forEach((f,b)=>{if(!f)return;const{id:y,url:v,at:m,elIndex:C}=c[b],M={...f,id:y,elIndex:C,ts:Y(m,this.siteMeta.defaultLang)},E=v?.startsWith("http")&&!v.includes(`//${location.hostname}/`),A=E?v:$(v);if(!A){l.push(M);return}if(E){l.push({...M,slug:A});return}const{slug:S,lang:oa}=this.parseReaderSlug(d,A,v);l.push({...M,slug:S,lang:oa})}),N(l)}static async isReaderPage(e){return!!e.sel&&!!await x(e.sel,{lazy:!!e.lazy})}static async verifyImgsLocator(e){const t=e.split(",").map(r=>r.trim()).filter(Boolean).map(r=>`${r} img, ${r} canvas`).join(",");return!!await x(t,{lazy:!0,all:!1})}findNeighborChapter({sel:e,basePath:t}){const r=g(e);if(!r||r.startsWith("#")||r.startsWith("/#"))return;const s=$(r);if(s)return this.parseReaderSlug(t,s,r).slug}finalizeRawReaderData(e,{prevSlug:t,nextSlug:r}={}){const s=e.title?.chapters;if(!s?.length){const c=L(t),u=L(r);return!c&&!u?e:{...e,prev:c?{...c,slug:t}:void 0,next:u?{...u,slug:r}:void 0}}let n,i,l,o;for(let c=0;c<s.length&&!(n&&(!t||l)&&!r&&o);c++){const u=s[c];!n&&(e.slug==u.slug||e.chap===u.chap&&(e.vol===u.vol||e.vol===void 0))?(n=u,i=c):!l&&t===u.slug?l=u:!o&&r===u.slug&&(o=u)}return i!==void 0&&(l??(l=s[i+1]),o??(o=s[i-1])),{...e,inferVol:n?.inferVol,prev:l,next:o}}}var Ye=Object.defineProperty,Qe=(a,e,t)=>e in a?Ye(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Ze=(a,e,t)=>(Qe(a,typeof e!="symbol"?e+"":e,t),t);class X extends w{parseTitleSlug(e){return{slug:$(e)?.split("/").filter(Boolean)[1]}}}Ze(X,"specId","bato");function Ke(){return Math.random().toString(16).slice(2)}async function Xe({addListener:a,removeListener:e,transform:t,filter:r,handler:s,onTimeout:n,timeout:i,once:l}){return new Promise(o=>{a(h);const c=()=>l===!0&&e(h),u=i?setTimeout(()=>{c(),o(void 0),n?.()},i):void 0;async function h(p,...d){p=t?t(p):p,p!==void 0&&(!r||r(p,...d))&&(c(),o(p),s?.(p,...d),u&&clearTimeout(u))}})}async function et(a){return(await Xe({addListener:e=>window.addEventListener("message",e),removeListener:e=>window.removeEventListener("message",e),...a}))?.data}async function tt(a){const{receiverWindow:e,timeout:t,targetOrigin:r,event:s,args:n}=a,i={reqId:Ke(),event:s,args:n};return(e||window)?.postMessage(i,r??"*"),(await et({filter:l=>l?.data?.resId===i.reqId,timeout:t??3e4,once:!0}))?.result}const O={isAny:!0};function j(a,...e){return tt({event:"tk:fetchResult",args:{baseUrl:a,segments:e}})}var at=Object.defineProperty,rt=(a,e,t)=>e in a?at(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,st=(a,e,t)=>(rt(a,typeof e!="symbol"?e+"":e,t),t);const ee=class Ie extends w{async getRawReleasesData(){let e;try{const r=Array.from({length:2},async(s,n)=>{const i=`https://api.${location.host}/chapter?accept_erotic_content=true&page=${n+1}&order=new`;return(await fetch(i)).json()});e=(await Promise.all(r)).flat()}catch{return}const t=[];return e.forEach(r=>{const{vol:s,chap:n,hid:i,lang:l,updated_at:o,md_comics:c}=r,u=typeof n=="string"&&!isNaN(+n)?+n:void 0;typeof u=="number"&&t.push({id:c.hid,slug:c.slug,name:c.title,chapters:[{slug:i,vol:typeof s=="string"&&!isNaN(+s)?+s:void 0,chap:u,lang:l,ts:new Date(o).valueOf()}]})}),super.finalizeRawReleasesData({rawReleases:t})}async getRawTitleData(){const e=await super.getRawTitleData();if(!e)return e;const t=await j(`https://api.${location.host}`,"comic",O,"chapters");if(!t)return e;const r=t.url.split("/").filter(Boolean).slice(-2)[0],s=te(t.value),n=g("h1 ~ div.text-sm span:first-child|row:demographic"),i=n?this.getTagIdsFromNames([n])?.[0]:void 0;return i&&!e.tags?.includes(i)&&(e.tags?.push(i),e.tags?.sort((l,o)=>l-o)),{...e,img:e.img??Z(g(this.spec.title?.img)),id:r,hasMoreChapters:s?.hasMore??!1,chapters:s?.chapters??[]}}async getRawReaderData(){const e=await super.getRawReaderData();return e&&{...e,lang:e.lang&&e.lang?.length<=6?e.lang:Ie.getLangFromReaderSlug(e.slug)||e.lang}}static getLangFromReaderSlug(e){const t=e.split("-");let r;for(let s=t.length-1;s>0;s--){const n=t[s];if(!isNaN(+n))break;r=r?`${n}-${r}`:n}return r&&r.length<=6?r:void 0}async getRawChaptersData(){if(!this.context?.rawId)return;const{rawId:e,lang:t="en",skip:r}=this.context,s=r?Math.floor(r/1e3)+1:void 0;try{const n=await fetch(`https://api.${location.host}/comic/${e}/chapters?lang=${t}&limit=1000${s&&s>1?`&page=${s}`:""}`),i=te(await n.json());return i?{...i,lang:t,asc:!1}:void 0}catch{return}}};st(ee,"specId","comick");let nt=ee;function te(a){if(!Array.isArray(a?.chapters))return;const e=[];return a.chapters.forEach(t=>{const{vol:r,chap:s,hid:n,lang:i,updated_at:l}=t,o=typeof s=="string"&&!isNaN(+s)?+s:void 0;typeof o!="number"||e.some(c=>c.vol==r&&c.chap===o&&c.lang===i)||e.push({slug:n,vol:typeof r=="string"&&!isNaN(+r)?+r:void 0,chap:o,lang:i,ts:new Date(l).valueOf()})}),{chapters:N(e),total:a.total??e.length,hasMore:a.total>a.limit}}function H(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 it=Object.defineProperty,lt=(a,e,t)=>e in a?it(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,ot=(a,e,t)=>(lt(a,typeof e!="symbol"?e+"":e,t),t);class ae extends w{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return{...e,siteMeta:ct(this.spec.releases,this.siteMeta)}}async getRawTitleData(){const e=await super.getRawTitleData();if(e)return{...e,siteMeta:J(this.siteMeta,{titleBase:G(location.pathname)})}}async getRawReaderData(){const e=await super.getRawReaderData();if(e)return{...e,siteMeta:J(this.siteMeta,{titleBase:G($(e.title.url))})}}}ot(ae,"specId","madara");function ct(a,e){if(!a)return;const t=a.title,r=document.querySelector(t.sel)??void 0;if(!r)return;const s=$(g(t.url,{root:r}));if(s!==void 0)return J(e,{titleBase:G(s)})}function J(a,{titleBase:e}){return a.titleBase===e?a:{...a,titleBase:e,readerBase:a.readerBase.replace(a.titleBase,e)}}function G(a){return H(a,"/").split("/").slice(0,-1).join("/")}var ut=Object.defineProperty,gt=(a,e,t)=>e in a?ut(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,pt=(a,e,t)=>(gt(a,typeof e!="symbol"?e+"":e,t),t);class re extends w{async getRawReleasesData(){const e=await this.getVM();if(!e)return super.getRawReleasesData();const t=e.LatestJSON.slice(0,100).map(r=>{const s=+r.Chapter.substring(1)/10;return{slug:r.IndexName,name:r.SeriesName,chapters:[{chap:s,slug:`${r.IndexName}-chapter-${s}.html`,ts:ie(r.Date)}]}});return this.finalizeRawReleasesData({rawReleases:t})}parseTitleSlug(e){const{slug:t}=super.parseTitleSlug(e);return!t||t.includes("{")?{}:{slug:t}}async getRawTitleData(){const e=await super.getRawTitleData();return e&&{...e,chapters:se(await this.getVM(),e.slug),hasMoreChapters:!1}}parseReaderSlug(e,t){const{slug:r,basePath:s}=super.parseReaderSlug(e,t);return{slug:r.replace(/-page-\d{1,3}\.html\/?$/,".html"),basePath:s}}async getRawReaderData(){const e=await this.getVM();if(!e)return;const t=document.querySelector(".ImageGallery img.img-fluid")?.getAttribute("ng-src"),r=e.IndexName,s=ne(e.CurChapter,r);return this.finalizeRawReaderData({chap:s.chap,slug:s.slug,imgs:ht(e,t??void 0),basePath:"/"+this.siteMeta.readerBase.replace("{titleSlug}",r)+"/",title:{name:e.SeriesName,slug:r,url:`/${this.siteMeta.titleBase}/${r}`,chapters:se(e,r),hasMoreChapters:!1}})}getVM(){return I(50,100,()=>window.angular?.element?.(document.documentElement)?.scope()?.vm)}}pt(re,"specId","manga4life");function se(a,e){return(a?.Chapters??a?.CHAPTERS??[]).sort((t,r)=>r.Chapter-t.Chapter).map(t=>ne(t,e))}function ne(a,e){const t=+a.Chapter.substring(1)/10;return{slug:`${e}-chapter-${t}.html`,chap:t,ts:ie(a.Date)}}function ie(a){const e=new Date(a).valueOf();return e===e?e:void 0}function ht(a,e){let t=e?.split(".").slice(-1)[0]??"png";t=t.length>=3&&t.length<=4?t:"png";try{const r=a.CurChapter.Chapter.slice(1,-1),s=a.CurChapter.Chapter[a.CurChapter.Chapter.length-1],n=s!=="0"?`${r}.${s}`:r,i=`https://${a.CurPathName}/manga/${a.IndexName}/${a.CurChapter.Directory?`${a.CurChapter.Directory}/`:""}${n}-`;return a.Pages.map(l=>{const o=(l+"").padStart(3,"0");return`${i}${o}.${t}`})}catch{return}}var dt=Object.defineProperty,ft=(a,e,t)=>e in a?dt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,mt=(a,e,t)=>(ft(a,typeof e!="symbol"?e+"":e,t),t);class le extends z{parseTitleSlug(e){return{slug:$(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:s,id:n})=>{const i=r.find(({type:c})=>c==="manga"),l=typeof s.volume=="string"?+s.volume:void 0,o=typeof s.chapter=="string"?+s.chapter:void 0;o&&t.push({slug:i.id,name:Object.values(i.attributes.title)[0],chapters:[{slug:s.externalUrl||n,vol:l,chap:o,lang:s.translatedLanguage,ts:new Date(s.readableAt).valueOf()}]})}),super.finalizeRawReleasesData({rawReleases:t})}async getRawTitleData(){const e="https://api.mangadex.org/manga/",[t,r]=await Promise.all([j(e,O),j(e,O,"feed")]);if(!t||!r)return;const s=r.value.data?.map?.(l=>{const{attributes:o,id:c}=l;if(typeof o!="object"||typeof c!="string"||!c)return;const{externalUrl:u,title:h,volume:p,chapter:d,translatedLanguage:f}=o;return{slug:u||c,label:h||void 0,vol:typeof p=="string"?+p:void 0,chap:typeof d=="string"?+d:void 0,lang:f||"en",ts:new Date(o.readableAt).valueOf()}}).filter(l=>l?.chap!=null)??[],{data:n}=t.value;if(!n)return;const i=ce({data:n,getTagIdsFromNames:l=>this.getTagIdsFromNames(l)});if(i)return{...i,chapters:N(s),hasMoreChapters:(r.value.data.total||0)>(r.value.data.limit||0)}}async getRawReaderData(){const e="https://api.mangadex.org/",[t,r,s]=await Promise.all([j(e,"chapter",O),j(e,"at-home","server",O),j(e,"manga",O,"aggregate")]);if(!t||!r||!s)return;const n=t.value.data,{volume:i,chapter:l,externalUrl:o,translatedLanguage:c}=n.attributes||{},{baseUrl:u,chapter:{data:h,dataSaver:p,hash:d}}=r.value,f=n.relationships?.find?.(S=>S.type==="manga");if(!f)return;const b=ce({data:f,getTagIdsFromNames:S=>this.getTagIdsFromNames(S)});if(!b||typeof s.value.volumes!="object")return;const y=oe(s.value)??[];(typeof l!="string"||l==="none")&&!y.length&&y.push({chap:0,slug:n.id});const v=y.findIndex(S=>S.slug===n.id),m=n.relationships?.find?.(S=>S.type==="scanlation_group"),C=u.endsWith("/")?u:u+"/",M=!!localStorage.getItem("md")?.includes?.('"dataSaver":true'),E=`${C}${M?"data-saver":"data"}/`,A=((M?p:h)??[]).map?.(S=>`${E}${d}/${S}`)??[];return{externalUrl:o,vol:typeof i=="string"?+i:void 0,inferVol:y[v]?.inferVol,chap:+l||0,imgs:A,lang:c,slug:n.id,prev:y[v+1],next:y[v-1],basePath:"/chapter/",groupName:m?.attributes?.name,groupUrl:m?.attributes?.website,isWebtoon:f?.attributes?.tags?.some(S=>S.attributes.name.en==="Long Strip"),title:{...b,chapters:y}}}async getRawChaptersData(){if(!this.context)return;const{titleSlug:e,lang:t="en"}=this.context;let r;try{const s=await fetch(`https://api.mangadex.org/manga/${e}/aggregate?translatedLanguage[]=${t}`);r=oe(await s.json())}catch{return}if(r)return{chapters:r,lang:t,asc:!1,hasMore:!1,total:r.length}}}mt(le,"specId","mangadex");function oe(a){if(typeof a.volumes!="object")return;const e=Object.values(a.volumes).map(({volume:t,chapters:r})=>{const s=t==="none"||typeof t!="string"?void 0:+t;return Object.values(r).map(({id:n,chapter:i})=>typeof i!="string"||i==="none"?void 0:{vol:s,chap:+i,slug:n})}).flat().filter(Boolean).reverse();return N(e)}function ce({data:a,getTagIdsFromNames:e}){const{id:t,attributes:r,relationships:s}=a;if(!t||typeof t!="string"||typeof r!="object")return;const{title:n,availableTranslatedLanguages:i,altTitles:l,tags:o,contentRating:c}=r;if(typeof n!="object"||i&&!Array.isArray(i))return;const u=Object.values(n)[0];if(!u||typeof u!="string")return;const h=wt(),p=(i??[])?.map?.(m=>typeof m=="string"?m:void 0).filter(Boolean)??[],d=p.filter(m=>m&&(!h||h.includes(m))),f=l?.map?.(m=>{const[[,C]=[]]=Object.entries(m);return C}),b=s?.find?.(m=>m.type==="cover_art")?.attributes?.fileName,y=b?`https://uploads.mangadex.org/covers/${t}/${b}.256.jpg`:void 0,v=(o||[]).map(m=>m?.attributes?.name?.en).concat(c).filter(Boolean);return{url:`${location.origin}/title/${t}`,slug:t,name:u,altNames:f,langs:d.length>0?d:p.length>0?p:["en"],img:y,tags:e(v)}}function wt(){const a=localStorage.getItem("md");if(a)try{const e=JSON.parse(a)?.userPreferences?.filteredLanguages;return e?.length?e:void 0}catch{return}}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 ue extends w{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return{...e,rawReleases:e.rawReleases.map(t=>({...t,id:t.id?.split("?")[0]}))}}async getRawReaderData(){if((await x(".current-viewtype",{lazy:!0,all:!1}))?.textContent?.trim().toLowerCase()!=="volume")return await super.getRawReaderData()}async getRawChaptersData(){const e=this.context?.lang;if(!e)return;const t=await x(`.tab-content[data-name="chapter"] a.dropdown-item[data-code="${e.toUpperCase()}"]`,{lazy:!0,all:!1});if(t)return t.click(),await x(`.tab-content[data-name="chapter"] li.item[data-number] a[href*="/${e}/"]`,{lazy:!0,all:!1}),await super.getRawChaptersData()}}bt(ue,"specId","mangafire");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 ge extends w{async getRawReaderData(){const e=await super.getRawReaderData();return e&&{...e,imgs:await this.getImgs()}}parseReaderSlug(e,t){const{slug:r,basePath:s}=super.parseReaderSlug(e,t),n=r.split("/").filter(Boolean),i=n[n.length-1];return{basePath:s,slug:i.startsWith("pg-")?n.slice(0,-1).join("/"):r}}async getImgs(){const e=await I(100,20,()=>window.imgsrcs),t=window.CryptoJS,r=t.enc.Hex.parse("e11adc3949ba59abbe56e057f20f883e"),s={iv:t.enc.Hex.parse("1234567890abcdef1234567890abcdef"),padding:t.pad.ZeroPadding};return t.AES.decrypt(e,r,s).toString(t.enc.Utf8).split(",")}}St(ge,"specId","mangago");var xt=Object.defineProperty,Ct=(a,e,t)=>e in a?xt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Dt=(a,e,t)=>(Ct(a,typeof e!="symbol"?e+"":e,t),t);class pe 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]}))}}}Dt(pe,"specId","mangaplus");var Mt=Object.defineProperty,It=(a,e,t)=>e in a?Mt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Tt=(a,e,t)=>(It(a,typeof e!="symbol"?e+"":e,t),t);class he extends w{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return{...e,rawReleases:e.rawReleases.map(t=>({...t,id:t.slug.substring(t.slug.lastIndexOf("-")+1)||void 0}))}}}Tt(he,"specId","mangareader");var Pt=Object.defineProperty,Bt=(a,e,t)=>e in a?Pt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Nt=(a,e,t)=>(Bt(a,typeof e!="symbol"?e+"":e,t),t);class de extends w{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return{...e,siteMeta:Ot(this.spec.releases,this.siteMeta)}}async getRawTitleData(){const e=await super.getRawTitleData();if(e)return{...e,siteMeta:k(this.siteMeta,{titleBase:_(location.pathname)})}}async getRawReaderData(){const e=await super.getRawReaderData();if(e)return{...e,siteMeta:k(this.siteMeta,{titleBase:_($(e.title.url))}),title:{...e.title,id:await this.getReaderTitleId()}}}async getRawSearchData(){const e=await super.getRawSearchData();if(!e)return;const t=this.spec.search.title,r=document.querySelector(t.sel),s=g(t.url,{root:r});return{...e,siteMeta:k(this.siteMeta,{titleBase:_($(s))})}}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((s,n)=>n.time-s.time);const r=t[0].manga_ID;return typeof r=="string"?r:typeof r=="number"?r+"":void 0}}Nt(de,"specId","mangastream");function Ot(a,e){if(!a)return;const t={...e,releases:H(location.pathname,"/")},r=a.title,s=document.querySelector(r.sel)??void 0;if(!s)return;const n=$(g(r.url,{root:s}));if(n===void 0)return;const i=s.querySelector(r.chapter.sel)??void 0;if(!(!i||$(g(r.chapter.url,{root:i}))===void 0))return t.titleBase=_(n),e.titleIdType===U.id&&(g(r.id,{root:s})||(e.titleIdType=U.name)),k(e,t)}function k(a,e){const t=Object.keys(e),r={...a};let s=!1;return t.forEach(n=>{const i=e[n];i!==a[n]&&(r[n]=i,s=!0)}),s?r:void 0}function _(a){return H(a,"/").split("/").slice(0,-1).join("/")}var jt=Object.defineProperty,Lt=(a,e,t)=>e in a?jt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,At=(a,e,t)=>(Lt(a,typeof e!="symbol"?e+"":e,t),t);class fe extends w{async getRawReaderData(){const e=await super.getRawReaderData();if(e)return{...e,title:{...e.title,name:e.title.name.replace("Ritorna a","").trim()}}}}At(fe,"specId","mangaworld");var zt=Object.defineProperty,kt=(a,e,t)=>e in a?zt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,_t=(a,e,t)=>(kt(a,typeof e!="symbol"?e+"":e,t),t);class me extends w{async getRawTitleData(){const e=await super.getRawTitleData();if(e)return{...e,hasMoreChapters:e.chapters.length===50}}}_t(me,"specId","mgeko");var Et=Object.defineProperty,Wt=(a,e,t)=>e in a?Et(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,qt=(a,e,t)=>(Wt(a,typeof e!="symbol"?e+"":e,t),t);const we=class W extends w{async getRawReaderData(){const e=await super.getRawReaderData();return e?.title.chapters?.length?{...e,prev:e.prev?W.finalizeChapter(e.prev):void 0,next:e.next?W.finalizeChapter(e.next):void 0,title:{...e.title,chapters:e.title.chapters.map(W.finalizeChapter)}}:e}static finalizeChapter(e){return{...e,slug:`chapter-${e.slug}`}}};qt(we,"specId","nato");let Ut=we;var Ft=Object.defineProperty,Vt=(a,e,t)=>e in a?Ft(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Ht=(a,e,t)=>(Vt(a,typeof e!="symbol"?e+"":e,t),t);class ye extends w{async getRawReaderData(){const e=await super.getRawReaderData();if(!e)return e;let t=e.title.id;if(!t){const s=this.spec.reader.title;s.id&&await x(s.id.split("|")[0],{lazy:!0}),t=g(s.id)}const r=!!this.context?.disableLazyChapters;return{...e,title:{...e.title,id:t,chapters:r?[]:await Jt(t),hasMoreChapters:r}}}parseTitleSlug(e){const{slug:t}=super.parseTitleSlug(e);if(!t)return{};const r=t.lastIndexOf("-"),s=+t.substring(r+1);return r===-1||isNaN(s)||s<1e3?{slug:t}:{slug:t.substring(0,r)}}}Ht(ye,"specId","nettruyen");async function Jt(a){if(!a)return[];const e=await fetch(`/Comic/Services/ComicService.asmx/ProcessChapterList?comicId=${a}`).then(t=>t.status===200?t.json():void 0).catch(()=>[]);return e?.chapters?.length?N(e.chapters.map(t=>{const{name:r,url:s}=t,n=L(r);if(!(!n||!s))return{slug:$(s).split("/").filter(Boolean).slice(2).join("/"),...n}})):[]}var Gt=Object.defineProperty,Yt=(a,e,t)=>e in a?Gt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Qt=(a,e,t)=>(Yt(a,typeof e!="symbol"?e+"":e,t),t);class ve extends w{async getRawTitleData(){const e=await super.getRawTitleData();return e&&{...e,hasMoreChapters:!!be()}}async getRawChaptersData(){const e=await this.getRawTitleData();if(!e?.hasMoreChapters)return e?{chapters:e?.chapters,title:{...e,chapters:[]},hasMore:e.hasMoreChapters}:void 0;const t=this.context?.findContinue;if(t){const o=await this.findContinueChapters({rawTitleData:e,chapter:t});return o?{chapters:e.chapters[0]?[e.chapters[0],...o]:o,title:{...e,chapters:[]}}:void 0}const r=this.context?.skip,{chapters:s,...n}=e,i=s.length,l=r&&r>=i?Math.floor(r/i)+1:void 0;return l?{chapters:await this.getChaptersByPage({page:l,titleSlug:e.slug})??[],title:{...n,chapters:[]},hasMore:!!be(l),asc:!1,skip:r}:{chapters:s,title:{...n,chapters:[]},hasMore:!1}}async findContinueChapters({rawTitleData:e,chapter:{chap:t},curPage:r=1,cacheChaptersByPage:s={},...n}){const i=s[r]??e.chapters,l=i[i.length-1].chap<=t,o=n.maxPage??Zt();if(l){if(i[0].chap>t){const v=[...i].reverse().find(m=>m.chap>t);return v?[v]:i.slice(0,1)}if(r<=1)return i.slice(0,1)}else if(r===o)return i.slice(-1);const c=e.chapters.length,u=Object.keys(s).map(v=>+v).sort((v,m)=>v-m),h=l?-1:1,p=u[u.indexOf(r)+h];if(p===r+h)return l?s[p].slice(-1).concat(i.slice(0,1)):i.slice(-1).concat(s[p].slice(0,1));const d=l?t-i[0].chap:i[0].chap-t,f=Math.floor(d/c)+1,b=l?Math.max(f,(p??1)+1):Math.min(f,(p??o+1)-1,o),y=await this.getChaptersByPage({page:b,titleSlug:e.slug});if(y)return await this.findContinueChapters({rawTitleData:e,chapter:{chap:t},curPage:b,maxPage:o,cacheChaptersByPage:{...s,1:e.chapters,[b]:y}})}async getChaptersByPage({page:e,titleSlug:t}){const r=Re(e);if(!r)return;const s=this.spec.title.chapter,n=s.sel,i=document.querySelector(n),l=I(100,30,()=>{const o=document.querySelector(n);if(o&&i!==o)return!0;r.click()});return r.click(),await l,await this.getChapters(s,{lazy:!1,titleSlug:t})}}Qt(ve,"specId","reaper");function be(a=1){return Re(a+1)}function Re(a){const e=`span[wire\\:key="paginator-page-1-page${a}"] button,button[aria-label="Go to page ${a}"]`;return document.querySelector(e)}function Zt(){const a=Array.from(document.querySelectorAll('span[wire\\:key^="paginator-page-"]'));return a.length?+a[a.length-1].getAttribute("wire:key").split("-").slice(-1)[0].replace("page",""):1}var 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 $e extends w{async getRawTitleData(){const e=await super.getRawTitleData();if(!e)return;const t=g(".info-detail__row > .genre-btn,.info__right .stats__row:first-child|text",{returnAll:!0})?.map(r=>[r,...r.split(" ")]).flat();return Se({...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:{...Se({...e.title,url:t,tags:[]},".episode-list .js-ep-cnt"),hasMoreChapters:!1}}}async getRawChaptersData(){if(!this.context)return;const{rawId:e,skip:t}=this.context,r=1e3,s=t?Math.floor(t/1e3)+1:1;try{const n=await fetch(`/series/${e}/episodes?page=${s}&sort=NEWEST&max_limit=${r}`);return ta(await n.json())}catch{return}}parseTitleSlug(e){if(!e)return{};const t=e.split("/").filter(Boolean);return{slug:t[1]??t[0]}}}ea($e,"specId","tapas");function Se(a,e){const t=aa(e)>20;return{...a,chapters:t?[]:a.chapters,hasMoreChapters:t}}function ta(a){const e=a?.data?.episodes;if(!Array.isArray(e))return;const t=e.map(s=>({chap:s.pending_scene??s.scene,slug:s.id+"",ts:new Date(s.publish_date)?.valueOf?.()||void 0})),r=a?.data?.pagination;return{chapters:t,total:r?.total??t.length,hasMore:!!r?.has_next}}function aa(a){return+(document.querySelector(a)?.textContent?.trim().split(" ")[0]||0)}var ra=Object.defineProperty,sa=(a,e,t)=>e in a?ra(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,na=(a,e,t)=>(sa(a,typeof e!="symbol"?e+"":e,t),t);class xe 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 s=await super.getRawTitleData();if(!s)return;const n=location.pathname.split("/")[1];return{...s,id:r,langs:[n].filter(Boolean),chapters:s.chapters.map(i=>({...i,lang:n})),hasMoreChapters:(document.querySelector(".paginate")?.childElementCount??1)>1}}async getRawReaderData(){const e=new URLSearchParams(location.search),t=e.get("episode_no"),r=e.get("title_no");if(!t||!r)return;const s=+t;if(s!==s)return;const n=document.title.split("|")[1]?.trim();if(!n)return;const i=location.pathname.split("/"),l=`${i.slice(0,4).join("/")}/list?title_no=${r}`,o=await this.getChapters({sel:"#sequence_scroll li.eg-flick-panel,#toolbar .episode_lst li[data-episode-no]",url:"a|attr:href",label:"|attr:data-episode-no || .num|text"},{lazy:!1,titleId:r,titleSlug:l}),c=i[1];return{chap:s,lang:c,slug:`${location.pathname}?title_no=${r}&episode_no=${s}`,basePath:"",imgs:await this.getReaderImgs(),isWebtoon:!0,title:{id:r,url:l,slug:l,name:n,langs:[c],chapters:(o??[]).map(u=>({...u,lang:c})),hasMoreChapters:!1}}}async getReaderImgs(){const e=g("#_imageList img|[attr:data-url,attr:src]",{returnAll:!0});return e?.length?e:await I(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 s=q(r);return{basePath:"",slug:s.pathname+s.search}}return{basePath:"",slug:r}}}na(xe,"specId","webtoon");const ia=[X,nt,re,le,de,ae,Ut,ye,ve,$e,ge,ue,me,xe,he,fe,pe];function Ce(a){const e=ia.find(t=>t.specId===a.spec.id)??w;return new e(a)}async function la(a){const{spec:e}=a;if(e){const t=a.siteMeta??e.meta,r=a.type?[a.type]:De(t,e.generic);if(!r.length)return;const s=Ce({...a,spec:e,siteMeta:t});return await P(r.map(n=>s.getRawPageByType(n,r.length>1)))}return await P((a.genericSpecs??[]).map(t=>{const r=De(t.meta,t.generic);if(!r.length)return[];const s=Ce({...a,spec:t,siteMeta:t.meta});return r.map(n=>s.getRawPageByType(n,!0))}).flat())}function De(a,e){if(location.pathname==="/")return[];const{titleBase:t,readerBase:r}=a,s=location.pathname.split("/").filter(Boolean),n=Me(s,r),i=Me(s,t);if(n!==i)return n>i?[R.reader]:[R.title];if(n>0)return[R.reader,R.title];if(s.length===1){const l=[!r&&R.reader,!t&&R.title].filter(Boolean);if(l.length)return l}return!r&&!t||e?[R.reader,R.title]:[]}function Me(a,e){if(!e)return 0;const t=e.split("/").filter(Boolean),r=t.includes("{slug}");if(r&&a.length!==t.length||!r&&a.length<=t.length)return 0;let s=0;for(let n=0;n<t.length;n++){const i=t[n];if(a[n]!==i&&i[0]!=="{")break;s++}return s}T.PageType=R,T.scrape=la});
1
+ (function(T,P){typeof exports=="object"&&typeof module<"u"?P(exports):typeof define=="function"&&define.amd?define(["exports"],P):(T=typeof globalThis<"u"?globalThis:T||self,P(T._trackkun_={}))})(this,function(T){"use strict";function P(a){let e=!1;return new Promise((t,r)=>{Promise.all(a.map(async s=>{const n=await s;!e&&n&&(e=!0,t(n))})).then(()=>{e||t(void 0)})})}function q(a,{removeTrailingSlash:e=!0}={}){if(!a)return;const t=e&&a.endsWith("/")?a.slice(0,-1):a;try{return new URL(t)}catch{return}}function $(a){if(!(!a||typeof a!="string"))return a.startsWith("http://")||a.startsWith("https://")?q(a)?.pathname:a.startsWith("//")?q(`https:${a}`)?.pathname:a}async function I(a,e,t){const r=await t(()=>{a=0});if(r!==void 0)return r;if(!(a<=0))return await new Promise(s=>{setTimeout(async()=>{const n=await I(a-1,e,t);s(n)},e)})}async function x(a,e,t=0){const r=e.root??document.documentElement,s=e.timeoutMs??1e4;return I(e.lazy===!0?s/50:0,50,()=>{const n=e.all===!0?Array.from(r.querySelectorAll(a)):r.querySelector(a)??void 0;return(e.all?!n?.length:!n)?void 0:n})}const Te={text:Pe,attr:Be,"attr-contain":Ne,value:Oe,row:je};function g(a,e={}){if(!a)return;const{root:t=document.documentElement,returnAll:r}=e,s=a.split("||").map(u=>u.trim()).filter(u=>!!u&&u.includes("|"));if(s.length>1){for(let u=0;u<s.length;u+=1){const p=g(s[u],e);if(p?.length)return p}return}const[n,i]=a.split("|");if(!i)return;const l=(i?.startsWith("[")&&i.endsWith("]")?i.substring(1,i.length-1).split(","):[i]).map(u=>{const p=u.indexOf(":"),h=p!==-1;return{action:h?u.substring(0,p):u,param:h?u.substring(p+1):""}}),o=n?Array.from(t.querySelectorAll(n)):[t];if(!o.length)return r?[]:void 0;const c=[];for(const u of o)for(const p of l){const h=Te[p.action],d=h(u,p.param);if(d){if(r){c.push(d);break}return d}}return r?c:void 0}function Pe(a){return Array.from(a.childNodes).filter(e=>e.nodeType===3).map(e=>B(e.textContent)).filter(Boolean).join(" ").trim()||B(a.textContent)}function Be(a,e){return B(a.getAttribute(e))}function Ne(a,e){let t=a.getAttribute(e);if(!t){const r=a.getAttributeNames().find(s=>s.includes(e));r&&(t=a.getAttribute(r))}return B(t)}function Oe(a){return a.value}function je(a,e){if(!e)return;const t=B(a.textContent)?.toLowerCase(),r=e.toLowerCase();if(!(t!==r&&t!==`${r}:`))return B(a.nextElementSibling?.textContent??a.nextSibling?.textContent)}function B(a){if(a)return a?.replace(/(\n|\t)/g," ").trim()||void 0}var Le=(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))(Le||{}),Ae=(a=>(a[a.ok=1]="ok",a[a.hidden=2]="hidden",a[a.deleted=3]="deleted",a))(Ae||{}),ze=(a=>(a[a.pending=0]="pending",a[a.completed=1]="completed",a[a.offline=2]="offline",a[a.incompat=3]="incompat",a))(ze||{}),U=(a=>(a.id="id",a.name="name",a.slug="slug",a))(U||{}),F=(a=>(a.blank="about:blank",a.title="meta.title",a.reader="meta.reader",a))(F||{});const ke=/(vol(ume)?|season)(\s*|-|\.)(\d+)/i,_e=/(ch(ap(t(er)?|\.)?|\.)?|^#|episode\.?|capitolo\.?|capitulo\.?|bölüm\.?)(\s*|-)(\d+([_-~,.]\d+)?)/i,Ee=/\d+([_-~,.]\d+)?/,We=/[_-~,]/;function N(a){if(!a||!a)return;if(!isNaN(+a))return{chap:+a};const e=a.match(ke),t=e?.[0]?a.replace(e[0],"").trim():a,r=t.match(_e),s=t.match(Ee),n=r?.[6],i=n??s?.[0];if(!i)return;const l=+i.replace(We,".");if(isNaN(l))return;const o=e?.[4];return{vol:o&&!isNaN(+o)&&a.indexOf(e[0])<a.indexOf(n?r[0]:s[0])?+o:void 0,chap:l}}function O(a){return a.sort((e,t)=>e.vol===void 0||t.vol===void 0?t.chap-e.chap:t.vol-e.vol||t.chap-e.chap),qe(a)}function qe(a){const e={};for(let t=a.length-1;t>=0;t--){const r=a[t],s=r.lang??"";r.vol!==void 0?e[s]=r.vol:e[s]!==void 0&&(r.inferVol=e[s])}return a}const Ue=[{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:"ann",it:"anno",es:"a\xF1o"}}];function Y(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 s=new Date(t);if(s instanceof Date){const c=s.valueOf();if(!isNaN(c))return s.getHours()===0&&s.getMinutes()===0?Math.min(r,c+432e5):c}const n=Ue.find(c=>e&&c.locales[e]&&t.indexOf(c.locales[e])!==-1?!0:t.indexOf(c.locales.en)!==-1);if(!n)return;const i=t.split(" ").filter(Boolean),l=Q(i)??Q(i,["a","an"]);if(!l)return;const o=r-l*n.seconds*1e3;return o>0?o:void 0}function Q(a,e){for(let t=0;t<a.length;t++){const r=a[t];if(e?.includes(r))return 1;const s=+r;if(s)return s<0?void 0:s}}function Z(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 K(a,{titleSlug:e,titleId:t}){if(!a)return"/";let r=a.replace("{titleSlug}",e);t&&(r=r.replace("{titleId}",t));const s=r.endsWith("/")?r:r+"/";return s.startsWith("/")?s:"/"+s}function Fe(a,e){const t=[...e],r=[];let s=!1,n=0;const i=Math.min(a.length,100);for(let o=0;o<i;o++){if(n>=10/2){const d=10-r.length;if(d>0){const f=o+d<=a.length?a.slice(o,o+d):t.slice(0,d);r.push(...f)}break}const c=a[o],u=c.id!==void 0,p=t.findIndex(d=>u&&d.id===c.id||d.slug===c.slug),h=p===-1?void 0:t.splice(p,1)[0];!h||h.chapters[0]?.chap!==c.chapters[0]?.chap?(s=!0,r.push({...c,changed:!0})):(n++,r.push(c))}if(!s)return[];if(r.length<=10)return r;const l=[];for(let o=0;o<r.length;o++){const c=r[o];(c.changed||o<10)&&l.push(c)}return l}function Ve(a,e){const t={};return a.forEach(r=>{const s=r.chapters.reduce((n,i)=>{const l=i.lang||e||"";return n[l]||(n[l]=[]),n[l].push(i),n},{});Object.entries(s).forEach(([n,i])=>{const l=`${r.slug}:${n}`;t[l]?(t[l].chapters.push(...i),O(t[l].chapters)):t[l]={...r,lang:n===""?void 0:n,chapters:i}})}),Object.values(t)}var R=(a=>(a.title="title",a.reader="reader",a.releases="releases",a.chapters="chapters",a.search="search",a))(R||{}),He=Object.defineProperty,Je=(a,e,t)=>e in a?He(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,D=(a,e,t)=>(Je(a,typeof e!="symbol"?e+"":e,t),t);class z{constructor(e){D(this,"spec"),D(this,"siteMeta"),D(this,"tags"),D(this,"context"),D(this,"methodsMap",{[R.title]:()=>this.getRawTitleData(),[R.reader]:()=>this.getRawReaderData(),[R.releases]:()=>this.getRawReleasesData(),[R.search]:()=>this.getRawSearchData(),[R.chapters]:()=>this.getRawChaptersData()}),D(this,"normalizedTagsMap"),this.spec=e.spec,this.siteMeta=e.siteMeta,this.tags=e.tags,this.context=e.context}async getRawSearchData(){throw new Error("Unimplemented")}async getRawPageByType(e,t=!1){const r=await this.methodsMap[e](),s=!r&&Ye(this.spec);if(t&&!r&&!s)return;const n=location.origin+location.pathname;return{type:e,is404:s,specId:this.spec.id,siteName:g(this.spec.name),url:n,data:r,spec:this.spec,context:this.context}}parseReaderSlug(e,t,r){const s=t.endsWith("/")?t.slice(0,-1):t;if(e.includes("{")){const n=e.split("/").filter(Boolean),i=s.split("/").filter(Boolean);if(n.length<i.length){const l=i[n.indexOf("{lang}")],o=i[n.indexOf("{titleId}")],c=i[n.indexOf("{titleSlug}")],u=e.replace("{lang}",l).replace("{titleId}",o).replace("{titleSlug}",c);if(s.startsWith(u))return{basePath:u,lang:l.toLowerCase(),titleId:o,titleSlug:c,slug:s.replace(u,"")}}}else if(s.startsWith(e))return{basePath:e,slug:s.replace(e,"")};return{basePath:"",slug:s[0]==="/"?s.substring(1):s}}parseTitleSlug(e){if(typeof e!="string")return{};const t=$(e),r=t?.split("/").filter(Boolean);if(!r?.length)return{};const s=this.siteMeta.titleBase.split("/").filter(Boolean),n=s.indexOf("{slug}");return(n===-1?r.length-s.length>=1:r.length===s.length)?{id:r[s.indexOf("{id}")],slug:n===-1?r.slice(s.length).join("/"):r[n]}:{slug:t}}finalizeRawReleasesData(e){const t=this.spec.releases?.title?.lang?this.siteMeta.defaultLang:void 0,r=Ve(e.rawReleases,t);if(r.length)return{rawReleases:this.context?.oldRawReleases?Fe(r,this.context.oldRawReleases):r}}getTagIdsFromNames(e){if(!e?.length)return;const t=this.normalizedTagsMap??(this.normalizedTagsMap=Ge(this.tags)),r=e.map(s=>t[V(s)]).filter(Boolean);return r.length===0?void 0:Array.from(new Set(r)).sort((s,n)=>s-n)}}D(z,"specId"),D(z,"siteId");function Ge(a){const e={};return a.forEach(({id:t,name:r,altNames:s})=>{e[V(r)]=t,s&&s.forEach(n=>{e[V(n)]=t})}),e}function V(a){const e=a.toLowerCase().replaceAll(" ","").replaceAll("-","");return e[e.length-1]==="s"?e.substring(0,e.length-1):e}function Ye(a){return a[404]&&document.querySelector(a[404])?!0:document.title.toLowerCase().includes("not found")}class w extends z{async getRawReleasesData(){if(!this.spec?.releases?.title)return;const{chapter:e,...t}=this.spec.releases.title,r=await x(t.sel,{lazy:!0,all:!0});if(!r?.length)return;const s=r.slice(0,100).map(i=>{const l=g(t.url,{root:i}),o=$(l),c=g(t.name,{root:i}),u=g(t.at,{root:i});if(!(!o||!c))return{titleEl:i,id:g(t.id,{root:i}),path:o,name:c,lang:g(t.lang,{root:i})?.toLowerCase(),at:Y(u,this.siteMeta.defaultLang)}}).filter(Boolean);if(!s.length)return;const n=[];return await Promise.all(s.map(async i=>{const{path:l,titleEl:o,lang:c,at:u,...p}=i,{id:h,slug:d}=this.parseTitleSlug(l);if(!d)return;const f=p.id||h,b=await this.getChapters(e,{root:o,titleId:f,titleSlug:d})??[];b.length&&n.push({slug:d,chapters:c||u?b.map(y=>({...y,elIndex:void 0,lang:y.lang??c,ts:y.ts??u})):b,...p,id:f})})),this.finalizeRawReleasesData({rawReleases:n})}async getRawTitleData(){const e=this.spec.title;if(!e||e.sel&&!await x(e.sel,{lazy:!!e.lazy}))return;const t=g(e.name);if(!t)return;const{id:r,slug:s}=this.parseTitleSlug(location.pathname);if(!s)return;let n=g(e.tags,{returnAll:!0})??[];n.length===1&&(n=n[0].split(",").map(u=>u.trim()).filter(Boolean));const i=g(e.type),l=g(e.langs,{returnAll:!0})?.map(u=>u.toLowerCase()),o=r||g(e.id),c=await this.getChapters(e.chapter,{lazy:!0,titleId:o,titleSlug:s})??[];return{id:o||g(e.id),url:location.origin+location.pathname,slug:s,name:t,langs:l?.length?l:e.langs&&this.siteMeta.defaultLang?[this.siteMeta.defaultLang]:void 0,tags:this.getTagIdsFromNames([...n??[],...i?[i]:[]]),chapters:c,img:e.img?await this.getValidImgSrc(e.img):void 0,firstUrl:g(e.first)}}getValidImgSrc(e){return I(33,30,()=>{const t=g(e);return t&&!t.startsWith("data:")?t:void 0})}async getRawReaderData(){const{spec:e,siteMeta:t}=this;if(!e?.reader||e.generic&&!await w.isReaderPage(e.reader))return;const r=e.reader.content;if(!(!r||await w.verifyImgsLocator(r)))return;const s=e.reader.title,n=document.querySelector(s.sel);if(!n)return;const i=g(s.name,{root:n}),l=g(s.url,{root:n}),{slug:o,id:c}=this.parseTitleSlug(l),u=g(s.img,{root:n});if(!i||!l||!o)return;const p=c||g(s.id),h=!!this.context?.disableLazyChapters,d=await this.getChapters(e.reader?.chapter,{titleId:p,titleSlug:o,lazy:!h,timeoutMs:12e4})??[],f=g(e.reader.label)?.toLowerCase().replace(i.toLowerCase(),"");if(!f)return;const{vol:b,chap:y=0}=N(f)||{},{slug:v,basePath:m,lang:C,titleId:M}=this.parseReaderSlug(K(t.readerBase,{titleId:p,titleSlug:o}),location.pathname,location.href);return this.finalizeRawReaderData({vol:b,chap:y,lang:C??g(e.reader.lang)?.toLowerCase()??(e.reader.lang?this.siteMeta.defaultLang:void 0),slug:v,basePath:m,imgsLocator:e.reader.imgs,title:{id:p||M||g(s.id),url:l,slug:o,name:i,langs:C?[C]:void 0,img:Z(u),chapters:d,hasMoreChapters:!!e.reader?.chapter&&!d.length&&h}},{prevSlug:this.findNeighborChapter({sel:e.reader.prev,basePath:m}),nextSlug:this.findNeighborChapter({sel:e.reader.next,basePath:m})})}async getRawChaptersData(){const e=this.siteMeta.chapters;if(e===F.blank)return;const t=e===F.reader?(await this.getRawReaderData())?.title:await this.getRawTitleData();if(!t)return;const r=this.context?.lang,{chapters:s}=t,n=r?s.filter(i=>!i.lang||i.lang===r):s;return{chapters:n,title:{...t,chapters:[]},hasMore:!1,asc:!1,total:n.length}}async getRawSearchData(){const e=this.spec.search?.title;if(!e)return;const{chapter:t}=e,r=[];return await Promise.all(Array.from(document.querySelectorAll(e.sel)).map(async s=>{const n=g(e.url,{root:s}),i=$(n),l=g(e.name,{root:s}),{slug:o,id:c}=this.parseTitleSlug(i);!i||!l||!o||r.push({id:c,slug:o,name:l,chapters:await this.getChapters(t,{root:s,titleId:c,titleSlug:o})??[]})})),r.length?{rawReleases:r}:void 0}async getChapters(e,{root:t=document.documentElement,titleId:r="",titleSlug:s="",lazy:n=!0,timeoutMs:i}){if(!e)return;const l=[],o=await x(e.sel,{root:t,all:!0,lazy:n,timeoutMs:i});if(!o?.length)return l;const c=(o??[]).map((f,b)=>({id:g(e.id,{root:f}),label:g(e.label,{root:f}),url:g(e.url,{root:f}),at:g(e.at,{root:f}),elIndex:b})),u=c.map(({label:f})=>N(f)),p=u[1]?.chap;!u[0]&&(p===void 0||p<=1)&&(u[0]={chap:0});const{readerBase:h}=this.siteMeta,d=K(h,{titleId:r,titleSlug:s});return u.forEach((f,b)=>{if(!f)return;const{id:y,url:v,at:m,elIndex:C}=c[b],M={...f,id:y,elIndex:C,ts:Y(m,this.siteMeta.defaultLang)},E=v?.startsWith("http")&&!v.includes(`//${location.hostname}/`),A=E?v:$(v);if(!A){l.push(M);return}if(E){l.push({...M,slug:A});return}const{slug:S,lang:ca}=this.parseReaderSlug(d,A,v);l.push({...M,slug:S,lang:ca})}),O(l)}static async isReaderPage(e){return!!e.sel&&!!await x(e.sel,{lazy:!!e.lazy})}static async verifyImgsLocator(e){const t=e.split(",").map(r=>r.trim()).filter(Boolean).map(r=>`${r} img, ${r} canvas`).join(",");return!!await x(t,{lazy:!0,all:!1})}findNeighborChapter({sel:e,basePath:t}){const r=g(e);if(!r||r.startsWith("#")||r.startsWith("/#"))return;const s=$(r);if(s)return this.parseReaderSlug(t,s,r).slug}finalizeRawReaderData(e,{prevSlug:t,nextSlug:r}={}){const s=e.title?.chapters;if(!s?.length){const c=N(t),u=N(r);return!c&&!u?e:{...e,prev:c?{...c,slug:t}:void 0,next:u?{...u,slug:r}:void 0}}let n,i,l,o;for(let c=0;c<s.length&&!(n&&(!t||l)&&!r&&o);c++){const u=s[c];!n&&(e.slug==u.slug||e.chap===u.chap&&(e.vol===u.vol||e.vol===void 0))?(n=u,i=c):!l&&t===u.slug?l=u:!o&&r===u.slug&&(o=u)}return i!==void 0&&(l??(l=s[i+1]),o??(o=s[i-1])),{...e,inferVol:n?.inferVol,prev:l,next:o}}}var Qe=Object.defineProperty,Ze=(a,e,t)=>e in a?Qe(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Ke=(a,e,t)=>(Ze(a,typeof e!="symbol"?e+"":e,t),t);class X extends w{parseTitleSlug(e){return{slug:$(e)?.split("/").filter(Boolean)[1]}}}Ke(X,"specId","bato");function Xe(){return Math.random().toString(16).slice(2)}async function et({addListener:a,removeListener:e,transform:t,filter:r,handler:s,onTimeout:n,timeout:i,once:l}){return new Promise(o=>{a(p);const c=()=>l===!0&&e(p),u=i?setTimeout(()=>{c(),o(void 0),n?.()},i):void 0;async function p(h,...d){h=t?t(h):h,h!==void 0&&(!r||r(h,...d))&&(c(),o(h),s?.(h,...d),u&&clearTimeout(u))}})}async function tt(a){return(await et({addListener:e=>window.addEventListener("message",e),removeListener:e=>window.removeEventListener("message",e),...a}))?.data}async function at(a){const{receiverWindow:e,timeout:t,targetOrigin:r,event:s,args:n}=a,i={reqId:Xe(),event:s,args:n};return(e||window)?.postMessage(i,r??"*"),(await tt({filter:l=>l?.data?.resId===i.reqId,timeout:t??3e4,once:!0}))?.result}const j={isAny:!0};function L(a,...e){return at({event:"tk:fetchResult",args:{baseUrl:a,segments:e}})}var rt=Object.defineProperty,st=(a,e,t)=>e in a?rt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,nt=(a,e,t)=>(st(a,typeof e!="symbol"?e+"":e,t),t);const ee=class Ie extends w{async getRawReleasesData(){let e;try{const r=Array.from({length:2},async(s,n)=>{const i=`https://api.${location.host}/chapter?accept_erotic_content=true&page=${n+1}&order=new`;return(await fetch(i)).json()});e=(await Promise.all(r)).flat()}catch{return}const t=[];return e.forEach(r=>{const{vol:s,chap:n,hid:i,lang:l,updated_at:o,md_comics:c}=r,u=typeof n=="string"&&!isNaN(+n)?+n:void 0;typeof u=="number"&&t.push({id:c.hid,slug:c.slug,name:c.title,chapters:[{slug:i,vol:typeof s=="string"&&!isNaN(+s)?+s:void 0,chap:u,lang:l,ts:new Date(o).valueOf()}]})}),super.finalizeRawReleasesData({rawReleases:t})}async getRawTitleData(){const e=await super.getRawTitleData();if(!e)return e;const t=await L(`https://api.${location.host}`,"comic",j,"chapters");if(!t)return e;const r=t.url.split("/").filter(Boolean).slice(-2)[0],s=te(t.value),n=g("h1 ~ div.text-sm span:first-child|row:demographic"),i=n?this.getTagIdsFromNames([n])?.[0]:void 0;return i&&!e.tags?.includes(i)&&(e.tags?.push(i),e.tags?.sort((l,o)=>l-o)),{...e,img:e.img??Z(g(this.spec.title?.img)),id:r,hasMoreChapters:s?.hasMore??!1,chapters:s?.chapters??[]}}async getRawReaderData(){const e=await super.getRawReaderData();return e&&{...e,lang:e.lang&&e.lang?.length<=6?e.lang:Ie.getLangFromReaderSlug(e.slug)||e.lang}}static getLangFromReaderSlug(e){const t=e.split("-");let r;for(let s=t.length-1;s>0;s--){const n=t[s];if(!isNaN(+n))break;r=r?`${n}-${r}`:n}return r&&r.length<=6?r:void 0}async getRawChaptersData(){if(!this.context?.rawId)return;const{rawId:e,lang:t="en",skip:r}=this.context,s=r?Math.floor(r/1e3)+1:void 0;try{const n=await fetch(`https://api.${location.host}/comic/${e}/chapters?lang=${t}&limit=1000${s&&s>1?`&page=${s}`:""}`),i=te(await n.json());return i?{...i,lang:t,asc:!1}:void 0}catch{return}}};nt(ee,"specId","comick");let it=ee;function te(a){if(!Array.isArray(a?.chapters))return;const e=[];return a.chapters.forEach(t=>{const{vol:r,chap:s,hid:n,lang:i,updated_at:l}=t,o=typeof s=="string"&&!isNaN(+s)?+s:void 0;typeof o!="number"||e.some(c=>c.vol==r&&c.chap===o&&c.lang===i)||e.push({slug:n,vol:typeof r=="string"&&!isNaN(+r)?+r:void 0,chap:o,lang:i,ts:new Date(l).valueOf()})}),{chapters:O(e),total:a.total??e.length,hasMore:a.total>a.limit}}function H(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 lt=Object.defineProperty,ot=(a,e,t)=>e in a?lt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,ct=(a,e,t)=>(ot(a,typeof e!="symbol"?e+"":e,t),t);class ae extends w{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return{...e,siteMeta:ut(this.spec.releases,this.siteMeta)}}async getRawTitleData(){const e=await super.getRawTitleData();if(e)return{...e,siteMeta:J(this.siteMeta,{titleBase:G(location.pathname)})}}async getRawReaderData(){const e=await super.getRawReaderData();if(e)return{...e,siteMeta:J(this.siteMeta,{titleBase:G($(e.title.url))})}}}ct(ae,"specId","madara");function ut(a,e){if(!a)return;const t=a.title,r=document.querySelector(t.sel)??void 0;if(!r)return;const s=$(g(t.url,{root:r}));if(s!==void 0)return J(e,{titleBase:G(s)})}function J(a,{titleBase:e}){return a.titleBase===e?a:{...a,titleBase:e,readerBase:a.readerBase.replace(a.titleBase,e)}}function G(a){return H(a,"/").split("/").slice(0,-1).join("/")}var gt=Object.defineProperty,pt=(a,e,t)=>e in a?gt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,ht=(a,e,t)=>(pt(a,typeof e!="symbol"?e+"":e,t),t);class re extends w{async getRawReleasesData(){const e=await this.getVM();if(!e)return super.getRawReleasesData();const t=e.LatestJSON.slice(0,100).map(r=>{const s=+r.Chapter.substring(1)/10;return{slug:r.IndexName,name:r.SeriesName,chapters:[{chap:s,slug:`${r.IndexName}-chapter-${s}.html`,ts:ie(r.Date)}]}});return this.finalizeRawReleasesData({rawReleases:t})}parseTitleSlug(e){const{slug:t}=super.parseTitleSlug(e);return!t||t.includes("{")?{}:{slug:t}}async getRawTitleData(){const e=await super.getRawTitleData();return e&&{...e,chapters:se(await this.getVM(),e.slug),hasMoreChapters:!1}}parseReaderSlug(e,t){const{slug:r,basePath:s}=super.parseReaderSlug(e,t);return{slug:r.replace(/-page-\d{1,3}\.html\/?$/,".html"),basePath:s}}async getRawReaderData(){const e=await this.getVM();if(!e)return;const t=document.querySelector(".ImageGallery img.img-fluid")?.getAttribute("ng-src"),r=e.IndexName,s=ne(e.CurChapter,r);return this.finalizeRawReaderData({chap:s.chap,slug:s.slug,imgs:dt(e,t??void 0),basePath:"/"+this.siteMeta.readerBase.replace("{titleSlug}",r)+"/",title:{name:e.SeriesName,slug:r,url:`/${this.siteMeta.titleBase}/${r}`,chapters:se(e,r),hasMoreChapters:!1}})}getVM(){return I(50,100,()=>window.angular?.element?.(document.documentElement)?.scope()?.vm)}}ht(re,"specId","manga4life");function se(a,e){return(a?.Chapters??a?.CHAPTERS??[]).sort((t,r)=>r.Chapter-t.Chapter).map(t=>ne(t,e))}function ne(a,e){const t=+a.Chapter.substring(1)/10;return{slug:`${e}-chapter-${t}.html`,chap:t,ts:ie(a.Date)}}function ie(a){const e=new Date(a).valueOf();return e===e?e:void 0}function dt(a,e){let t=e?.split(".").slice(-1)[0]??"png";t=t.length>=3&&t.length<=4?t:"png";try{const r=a.CurChapter.Chapter.slice(1,-1),s=a.CurChapter.Chapter[a.CurChapter.Chapter.length-1],n=s!=="0"?`${r}.${s}`:r,i=`https://${a.CurPathName}/manga/${a.IndexName}/${a.CurChapter.Directory?`${a.CurChapter.Directory}/`:""}${n}-`;return a.Pages.map(l=>{const o=(l+"").padStart(3,"0");return`${i}${o}.${t}`})}catch{return}}var ft=Object.defineProperty,mt=(a,e,t)=>e in a?ft(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,wt=(a,e,t)=>(mt(a,typeof e!="symbol"?e+"":e,t),t);class le extends z{parseTitleSlug(e){return{slug:$(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:s,id:n})=>{const i=r.find(({type:c})=>c==="manga"),l=typeof s.volume=="string"?+s.volume:void 0,o=typeof s.chapter=="string"?+s.chapter:void 0;o&&t.push({slug:i.id,name:Object.values(i.attributes.title)[0],chapters:[{slug:s.externalUrl||n,vol:l,chap:o,lang:s.translatedLanguage,ts:new Date(s.readableAt).valueOf()}]})}),super.finalizeRawReleasesData({rawReleases:t})}async getRawTitleData(){const e="https://api.mangadex.org/manga/",[t,r]=await Promise.all([L(e,j),L(e,j,"feed")]);if(!t||!r)return;const s=r.value.data?.map?.(l=>{const{attributes:o,id:c}=l;if(typeof o!="object"||typeof c!="string"||!c)return;const{externalUrl:u,title:p,volume:h,chapter:d,translatedLanguage:f}=o;return{slug:u||c,label:p||void 0,vol:typeof h=="string"?+h:void 0,chap:typeof d=="string"?+d:void 0,lang:f||"en",ts:new Date(o.readableAt).valueOf()}}).filter(l=>l?.chap!=null)??[],{data:n}=t.value;if(!n)return;const i=ce({data:n,getTagIdsFromNames:l=>this.getTagIdsFromNames(l)});if(i)return{...i,chapters:O(s),hasMoreChapters:(r.value.data.total||0)>(r.value.data.limit||0)}}async getRawReaderData(){const e="https://api.mangadex.org/",[t,r,s]=await Promise.all([L(e,"chapter",j),L(e,"at-home","server",j),L(e,"manga",j,"aggregate")]);if(!t||!r||!s)return;const n=t.value.data,{volume:i,chapter:l,externalUrl:o,translatedLanguage:c}=n.attributes||{},{baseUrl:u,chapter:{data:p,dataSaver:h,hash:d}}=r.value,f=n.relationships?.find?.(S=>S.type==="manga");if(!f)return;const b=ce({data:f,getTagIdsFromNames:S=>this.getTagIdsFromNames(S)});if(!b||typeof s.value.volumes!="object")return;const y=oe(s.value)??[];(typeof l!="string"||l==="none")&&!y.length&&y.push({chap:0,slug:n.id});const v=y.findIndex(S=>S.slug===n.id),m=n.relationships?.find?.(S=>S.type==="scanlation_group"),C=u.endsWith("/")?u:u+"/",M=!!localStorage.getItem("md")?.includes?.('"dataSaver":true'),E=`${C}${M?"data-saver":"data"}/`,A=((M?h:p)??[]).map?.(S=>`${E}${d}/${S}`)??[];return{externalUrl:o,vol:typeof i=="string"?+i:void 0,inferVol:y[v]?.inferVol,chap:+l||0,imgs:A,lang:c,slug:n.id,prev:y[v+1],next:y[v-1],basePath:"/chapter/",groupName:m?.attributes?.name,groupUrl:m?.attributes?.website,isWebtoon:f?.attributes?.tags?.some(S=>S.attributes.name.en==="Long Strip"),title:{...b,chapters:y}}}async getRawChaptersData(){if(!this.context)return;const{titleSlug:e,lang:t="en"}=this.context;let r;try{const s=await fetch(`https://api.mangadex.org/manga/${e}/aggregate?translatedLanguage[]=${t}`);r=oe(await s.json())}catch{return}if(r)return{chapters:r,lang:t,asc:!1,hasMore:!1,total:r.length}}}wt(le,"specId","mangadex");function oe(a){if(typeof a.volumes!="object")return;const e=Object.values(a.volumes).map(({volume:t,chapters:r})=>{const s=t==="none"||typeof t!="string"?void 0:+t;return Object.values(r).map(({id:n,chapter:i})=>typeof i!="string"||i==="none"?void 0:{vol:s,chap:+i,slug:n})}).flat().filter(Boolean).reverse();return O(e)}function ce({data:a,getTagIdsFromNames:e}){const{id:t,attributes:r,relationships:s}=a;if(!t||typeof t!="string"||typeof r!="object")return;const{title:n,availableTranslatedLanguages:i,altTitles:l,tags:o,contentRating:c}=r;if(typeof n!="object"||i&&!Array.isArray(i))return;const u=Object.values(n)[0];if(!u||typeof u!="string")return;const p=yt(),h=(i??[])?.map?.(m=>typeof m=="string"?m:void 0).filter(Boolean)??[],d=h.filter(m=>m&&(!p||p.includes(m))),f=l?.map?.(m=>{const[[,C]=[]]=Object.entries(m);return C}),b=s?.find?.(m=>m.type==="cover_art")?.attributes?.fileName,y=b?`https://uploads.mangadex.org/covers/${t}/${b}.256.jpg`:void 0,v=(o||[]).map(m=>m?.attributes?.name?.en).concat(c).filter(Boolean);return{url:`${location.origin}/title/${t}`,slug:t,name:u,altNames:f,langs:d.length>0?d:h.length>0?h:["en"],img:y,tags:e(v)}}function yt(){const a=localStorage.getItem("md");if(a)try{const e=JSON.parse(a)?.userPreferences?.filteredLanguages;return e?.length?e:void 0}catch{return}}var vt=Object.defineProperty,bt=(a,e,t)=>e in a?vt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Rt=(a,e,t)=>(bt(a,typeof e!="symbol"?e+"":e,t),t);class ue extends w{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return{...e,rawReleases:e.rawReleases.map(t=>({...t,id:t.id?.split("?")[0]}))}}async getRawReaderData(){if((await x(".current-viewtype",{lazy:!0,all:!1}))?.textContent?.trim().toLowerCase()!=="volume")return await super.getRawReaderData()}async getRawChaptersData(){const e=this.context?.lang;if(!e)return;const t=await x(`.tab-content[data-name="chapter"] a.dropdown-item[data-code="${e.toUpperCase()}"]`,{lazy:!0,all:!1});if(t)return t.click(),await x(`.tab-content[data-name="chapter"] li.item[data-number] a[href*="/${e}/"]`,{lazy:!0,all:!1}),await super.getRawChaptersData()}}Rt(ue,"specId","mangafire");var $t=Object.defineProperty,St=(a,e,t)=>e in a?$t(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,xt=(a,e,t)=>(St(a,typeof e!="symbol"?e+"":e,t),t);class ge extends w{async getRawReaderData(){const e=await super.getRawReaderData();return e&&{...e,imgs:await this.getImgs()}}parseReaderSlug(e,t){const{slug:r,basePath:s}=super.parseReaderSlug(e,t),n=r.split("/").filter(Boolean),i=n[n.length-1];return{basePath:s,slug:i.startsWith("pg-")?n.slice(0,-1).join("/"):r}}async getImgs(){const e=await I(100,20,()=>window.imgsrcs),t=window.CryptoJS,r=t.enc.Hex.parse("e11adc3949ba59abbe56e057f20f883e"),s={iv:t.enc.Hex.parse("1234567890abcdef1234567890abcdef"),padding:t.pad.ZeroPadding};return t.AES.decrypt(e,r,s).toString(t.enc.Utf8).split(",")}}xt(ge,"specId","mangago");var Ct=Object.defineProperty,Dt=(a,e,t)=>e in a?Ct(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Mt=(a,e,t)=>(Dt(a,typeof e!="symbol"?e+"":e,t),t);class pe 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]}))}}}Mt(pe,"specId","mangaplus");var It=Object.defineProperty,Tt=(a,e,t)=>e in a?It(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 he extends w{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return{...e,rawReleases:e.rawReleases.map(t=>({...t,id:t.slug.substring(t.slug.lastIndexOf("-")+1)||void 0}))}}}Pt(he,"specId","mangareader");var Bt=Object.defineProperty,Nt=(a,e,t)=>e in a?Bt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Ot=(a,e,t)=>(Nt(a,typeof e!="symbol"?e+"":e,t),t);class de extends w{async getRawReleasesData(){const e=await super.getRawReleasesData();if(e)return{...e,siteMeta:jt(this.spec.releases,this.siteMeta)}}async getRawTitleData(){const e=await super.getRawTitleData();if(e)return{...e,siteMeta:k(this.siteMeta,{titleBase:_(location.pathname)})}}async getRawReaderData(){const e=await super.getRawReaderData();if(e)return{...e,siteMeta:k(this.siteMeta,{titleBase:_($(e.title.url))}),title:{...e.title,id:await this.getReaderTitleId()}}}async getRawSearchData(){const e=await super.getRawSearchData();if(!e)return;const t=this.spec.search.title,r=document.querySelector(t.sel),s=g(t.url,{root:r});return{...e,siteMeta:k(this.siteMeta,{titleBase:_($(s))})}}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((s,n)=>n.time-s.time);const r=t[0].manga_ID;return typeof r=="string"?r:typeof r=="number"?r+"":void 0}}Ot(de,"specId","mangastream");function jt(a,e){if(!a)return;const t={...e,releases:H(location.pathname,"/")},r=a.title,s=document.querySelector(r.sel)??void 0;if(!s)return;const n=$(g(r.url,{root:s}));if(n===void 0)return;const i=s.querySelector(r.chapter.sel)??void 0;if(!(!i||$(g(r.chapter.url,{root:i}))===void 0))return t.titleBase=_(n),e.titleIdType===U.id&&(g(r.id,{root:s})||(e.titleIdType=U.name)),k(e,t)}function k(a,e){const t=Object.keys(e),r={...a};let s=!1;return t.forEach(n=>{const i=e[n];i!==a[n]&&(r[n]=i,s=!0)}),s?r:void 0}function _(a){return H(a,"/").split("/").slice(0,-1).join("/")}var Lt=Object.defineProperty,At=(a,e,t)=>e in a?Lt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,zt=(a,e,t)=>(At(a,typeof e!="symbol"?e+"":e,t),t);class fe extends w{async getRawReaderData(){const e=await super.getRawReaderData();if(e)return{...e,title:{...e.title,name:e.title.name.replace("Ritorna a","").trim()}}}}zt(fe,"specId","mangaworld");var kt=Object.defineProperty,_t=(a,e,t)=>e in a?kt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Et=(a,e,t)=>(_t(a,typeof e!="symbol"?e+"":e,t),t);class me extends w{async getRawTitleData(){const e=await super.getRawTitleData();if(e)return{...e,hasMoreChapters:e.chapters.length===50}}}Et(me,"specId","mgeko");var Wt=Object.defineProperty,qt=(a,e,t)=>e in a?Wt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Ut=(a,e,t)=>(qt(a,typeof e!="symbol"?e+"":e,t),t);const we=class W extends w{async getRawReaderData(){const e=await super.getRawReaderData();return e?.title.chapters?.length?{...e,prev:e.prev?W.finalizeChapter(e.prev):void 0,next:e.next?W.finalizeChapter(e.next):void 0,title:{...e.title,chapters:e.title.chapters.map(W.finalizeChapter)}}:e}static finalizeChapter(e){return{...e,slug:`chapter-${e.slug}`}}};Ut(we,"specId","nato");let Ft=we;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 ye extends w{async getRawReaderData(){const e=await super.getRawReaderData();if(!e)return e;let t=e.title.id;if(!t){const s=this.spec.reader.title;s.id&&await x(s.id.split("|")[0],{lazy:!0}),t=g(s.id)}const r=!!this.context?.disableLazyChapters;return{...e,title:{...e.title,id:t,chapters:r?[]:await Gt(t),hasMoreChapters:r}}}parseTitleSlug(e){const{slug:t}=super.parseTitleSlug(e);if(!t)return{};const r=t.lastIndexOf("-"),s=+t.substring(r+1);return r===-1||isNaN(s)||s<1e3?{slug:t}:{slug:t.substring(0,r)}}}Jt(ye,"specId","nettruyen");async function Gt(a){if(!a)return[];const e=await fetch(`/Comic/Services/ComicService.asmx/ProcessChapterList?comicId=${a}`).then(t=>t.status===200?t.json():void 0).catch(()=>[]);return e?.chapters?.length?O(e.chapters.map(t=>{const{name:r,url:s}=t,n=N(r);if(!(!n||!s))return{slug:$(s).split("/").filter(Boolean).slice(2).join("/"),...n}})):[]}var Yt=Object.defineProperty,Qt=(a,e,t)=>e in a?Yt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,Zt=(a,e,t)=>(Qt(a,typeof e!="symbol"?e+"":e,t),t);class ve extends w{async getRawTitleData(){const e=await super.getRawTitleData();return e&&{...e,hasMoreChapters:!!be()}}async getRawChaptersData(){const e=await this.getRawTitleData();if(!e?.hasMoreChapters)return e?{chapters:e?.chapters,title:{...e,chapters:[]},hasMore:e.hasMoreChapters}:void 0;const t=this.context?.findContinue;if(t){const o=await this.findContinueChapters({rawTitleData:e,chapter:t});return o?{chapters:e.chapters[0]?[e.chapters[0],...o]:o,title:{...e,chapters:[]}}:void 0}const r=this.context?.skip,{chapters:s,...n}=e,i=s.length,l=r&&r>=i?Math.floor(r/i)+1:void 0;return l?{chapters:await this.getChaptersByPage({page:l,titleSlug:e.slug})??[],title:{...n,chapters:[]},hasMore:!!be(l),asc:!1,skip:r}:{chapters:s,title:{...n,chapters:[]},hasMore:!1}}async findContinueChapters({rawTitleData:e,chapter:{chap:t},curPage:r=1,cacheChaptersByPage:s={},...n}){const i=s[r]??e.chapters,l=i[i.length-1].chap<=t,o=n.maxPage??Kt();if(l){if(i[0].chap>t){const v=[...i].reverse().find(m=>m.chap>t);return v?[v]:i.slice(0,1)}if(r<=1)return i.slice(0,1)}else if(r===o)return i.slice(-1);const c=e.chapters.length,u=Object.keys(s).map(v=>+v).sort((v,m)=>v-m),p=l?-1:1,h=u[u.indexOf(r)+p];if(h===r+p)return l?s[h].slice(-1).concat(i.slice(0,1)):i.slice(-1).concat(s[h].slice(0,1));const d=l?t-i[0].chap:i[0].chap-t,f=Math.floor(d/c)+1,b=l?Math.max(f,(h??1)+1):Math.min(f,(h??o+1)-1,o),y=await this.getChaptersByPage({page:b,titleSlug:e.slug});if(y)return await this.findContinueChapters({rawTitleData:e,chapter:{chap:t},curPage:b,maxPage:o,cacheChaptersByPage:{...s,1:e.chapters,[b]:y}})}async getChaptersByPage({page:e,titleSlug:t}){const r=Re(e);if(!r)return;const s=this.spec.title.chapter,n=s.sel,i=document.querySelector(n),l=I(100,30,()=>{const o=document.querySelector(n);if(o&&i!==o)return!0;r.click()});return r.click(),await l,await this.getChapters(s,{lazy:!1,titleSlug:t})}}Zt(ve,"specId","reaper");function be(a=1){return Re(a+1)}function Re(a){const e=`span[wire\\:key="paginator-page-1-page${a}"] button,button[aria-label="Go to page ${a}"]`;return document.querySelector(e)}function Kt(){const a=Array.from(document.querySelectorAll('span[wire\\:key^="paginator-page-"]'));return a.length?+a[a.length-1].getAttribute("wire:key").split("-").slice(-1)[0].replace("page",""):1}var Xt=Object.defineProperty,ea=(a,e,t)=>e in a?Xt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,ta=(a,e,t)=>(ea(a,typeof e!="symbol"?e+"":e,t),t);class $e extends w{async getRawTitleData(){const e=await super.getRawTitleData();if(!e)return;const t=g(".info-detail__row > .genre-btn,.info__right .stats__row:first-child|text",{returnAll:!0})?.map(r=>[r,...r.split(" ")]).flat();return Se({...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:{...Se({...e.title,url:t,tags:[]},".episode-list .js-ep-cnt"),hasMoreChapters:!1}}}async getRawChaptersData(){if(!this.context)return;const{rawId:e,skip:t}=this.context,r=1e3,s=t?Math.floor(t/1e3)+1:1;try{const n=await fetch(`/series/${e}/episodes?page=${s}&sort=NEWEST&max_limit=${r}`);return aa(await n.json())}catch{return}}parseTitleSlug(e){if(!e)return{};const t=e.split("/").filter(Boolean);return{slug:t[1]??t[0]}}}ta($e,"specId","tapas");function Se(a,e){const t=ra(e)>20;return{...a,chapters:t?[]:a.chapters,hasMoreChapters:t}}function aa(a){const e=a?.data?.episodes;if(!Array.isArray(e))return;const t=e.map(s=>({chap:s.pending_scene??s.scene,slug:s.id+"",ts:new Date(s.publish_date)?.valueOf?.()||void 0})),r=a?.data?.pagination;return{chapters:t,total:r?.total??t.length,hasMore:!!r?.has_next}}function ra(a){return+(document.querySelector(a)?.textContent?.trim().split(" ")[0]||0)}var sa=Object.defineProperty,na=(a,e,t)=>e in a?sa(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,ia=(a,e,t)=>(na(a,typeof e!="symbol"?e+"":e,t),t);class xe 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 s=await super.getRawTitleData();if(!s)return;const n=location.pathname.split("/")[1];return{...s,id:r,langs:[n].filter(Boolean),chapters:s.chapters.map(i=>({...i,lang:n})),hasMoreChapters:(document.querySelector(".paginate")?.childElementCount??1)>1}}async getRawReaderData(){const e=new URLSearchParams(location.search),t=e.get("episode_no"),r=e.get("title_no");if(!t||!r)return;const s=N(g(".paginate > span|text"));if(s===void 0)return;const{chap:n}=s,i=document.title.split("|")[1]?.trim();if(!i)return;const l=location.pathname.split("/"),o=`${l.slice(0,4).join("/")}/list?title_no=${r}`,c=await this.getChapters({sel:"#sequence_scroll li.eg-flick-panel,#toolbar .episode_lst li[data-episode-no]",url:"a|attr:href",label:"|attr:data-episode-no || .num|text"},{lazy:!1,titleId:r,titleSlug:o}),u=l[1];return{chap:n,lang:u,slug:`${location.pathname}?title_no=${r}&episode_no=${t}`,basePath:"",imgs:await this.getReaderImgs(),isWebtoon:!0,title:{id:r,url:o,slug:o,name:i,langs:[u],chapters:(c??[]).map(p=>({...p,lang:u})),hasMoreChapters:!1}}}async getReaderImgs(){const e=g("#_imageList img|[attr:data-url,attr:src]",{returnAll:!0});return e?.length?e:await I(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 s=q(r);return{basePath:"",slug:s.pathname+s.search}}return{basePath:"",slug:r}}}ia(xe,"specId","webtoon");const la=[X,it,re,le,de,ae,Ft,ye,ve,$e,ge,ue,me,xe,he,fe,pe];function Ce(a){const e=la.find(t=>t.specId===a.spec.id)??w;return new e(a)}async function oa(a){const{spec:e}=a;if(e){const t=a.siteMeta??e.meta,r=a.type?[a.type]:De(t,e.generic);if(!r.length)return;const s=Ce({...a,spec:e,siteMeta:t});return await P(r.map(n=>s.getRawPageByType(n,r.length>1)))}return await P((a.genericSpecs??[]).map(t=>{const r=De(t.meta,t.generic);if(!r.length)return[];const s=Ce({...a,spec:t,siteMeta:t.meta});return r.map(n=>s.getRawPageByType(n,!0))}).flat())}function De(a,e){if(location.pathname==="/")return[];const{titleBase:t,readerBase:r}=a,s=location.pathname.split("/").filter(Boolean),n=Me(s,r),i=Me(s,t);if(n!==i)return n>i?[R.reader]:[R.title];if(n>0)return[R.reader,R.title];if(s.length===1){const l=[!r&&R.reader,!t&&R.title].filter(Boolean);if(l.length)return l}return!r&&!t||e?[R.reader,R.title]:[]}function Me(a,e){if(!e)return 0;const t=e.split("/").filter(Boolean),r=t.includes("{slug}");if(r&&a.length!==t.length||!r&&a.length<=t.length)return 0;let s=0;for(let n=0;n<t.length;n++){const i=t[n];if(a[n]!==i&&i[0]!=="{")break;s++}return s}T.PageType=R,T.scrape=oa});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "trackkun-dom",
3
3
  "author": "endyquang",
4
- "version": "1.3.1",
4
+ "version": "1.3.2",
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, body:empty","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","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","content":"#readerarea","id":".ctop option:selected|attr:data-id","label":"h1.entry-title|text","imgs":"#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"}}},{"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, .lastest-content .page-item-detail","id":"[data-post-id]|attr:data-post-id","name":"h3 a, .item-summary h3|text","url":"a|attr:href","chapter":{"sel":".chapter-item","label":".chapter a|text","url":".chapter a|attr:href","at":".c-new-tag|attr:title || .post-on|text"}}},"title":{"sel":"body.manga-page","id":"#manga-chapters-holder|attr:data-id || .rating-post-id|attr:value || [data-action=\"bookmark\"]|attr:data-post","name":"h1|text","img":".summary_image .img-responsive, .summary_image img, .series-img img|[attr:data-src,attr-contain:src]","tags":"a[rel=\"tag\"][href*=\"genre\"],a[rel=\"tag\"][href*=\"tag\"],.genres-content|text","type":".post-content_item .summary-heading|row:type","chapter":{"sel":"li.wp-manga-chapter, .chapter-ul > li","url":"a|attr:href","label":"a, .chapter-title-date > p|text","at":".c-new-tag|attr:title || .chapter-release-date i|text"}},"reader":{"sel":".entry-content .read-container","content":".reading-content","label":".breadcrumb li.active|text","imgs":".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","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","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:not([rel])|attr:href || a|attr:href","at":"small|text"}},"reader":{"content":"#mangareader .container-fluid, #mangareader","label":"h3|text","imgs":"#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","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","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":{"content":"#readerarea","label":"h2.entry-title|text","imgs":"#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","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","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":{"content":".reading-detail","label":"a.itemcrumb.active > span[itemprop=\"name\"]|text","imgs":".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","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","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"},"search":{"title":{"sel":".SearchFilterNav + .row > div[ng-repeat^=\"Series\"]","name":"div:nth-child(2) a.SeriesName|text","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","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,a[href$=\"/cover\"] > 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","content":".reader-container","label":"select:first-of-type option[selected]|text","imgs":".reader-container img|attr-contain:src","title":{"sel":"div > a[href*=\"/comic/\"]","name":"|text || img[alt]|attr:alt","url":"|attr:href"},"lang":"select:last-of-type|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","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":{"content":"#viewer","label":"title|text","imgs":"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","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 b|text || 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","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","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","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":{"content":"#list-image","imgDivs":".card-wrap[data-url]","label":".breadcrumb-item.active|text","imgs":"#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","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","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":{"content":"main","label":"title|text","imgs":"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","searchBase":"search?q=","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":{"content":".viewer__body","id":"div[id^=\"episode-\"][data-ep-id]|attr:data-ep-id","label":"div[id^=\"episode-\"][data-ep-scene]|attr:data-ep-scene","imgs":".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"}}},{"id":"mangafire","meta":{"home":"home","releases":"updated","titleBase":"manga","readerBase":"read/{titleSlug}/{lang}","searchBase":"filter?keyword=","defaultLang":"en","titleIdType":"id"},"releases":{"title":{"sel":".unit > .inner","id":"a[data-tip]|attr:data-tip","name":".info a|text","url":"a|attr:href","chapter":{"sel":"ul.content li a","label":"span:first-child|text","url":"|attr:href","at":"span:last-child"}}},"title":{"id":".bookmark[data-id]|attr:data-id","name":".info h1[itemprop=\"name\"]|text","img":".poster img|attr-contain:src","tags":"#info-rating a[href*=\"/genre/\"]|text","langs":".tab-content[data-name=\"chapter\"] a.dropdown-item[data-code]|attr:data-code","chapter":{"sel":".tab-content[data-name=\"chapter\"] li.item[data-number]","url":"a|attr:href","label":"|attr:data-number","at":"a span:last-child|text"}},"reader":{"imgs":"","content":"#page-wrapper","imgDivs":".page","lstrip":".setting-tab.page-layout [data-value=\"longstrip\"].active","lstripBtn":".setting-tab.page-layout [data-value=\"longstrip\"]","label":"#number-panel ul li a[href*=\"/read/\"][data-number].active|attr:data-number","title":{"sel":"#ctrl-menu .head a","id":"body|attr:data-id","url":"|attr:href","name":"|text"},"chapter":{"sel":"#number-panel ul li a[href*=\"/read/\"][data-number]","label":"|attr:data-number","url":"|attr:href"}}},{"id":"webtoon","meta":{"titleBase":"","readerBase":"","searchBase":"search?keyword=","defaultLang":"en","chapters":"meta.reader","titleIdType":"id"},"title":{"name":"h1.subj,.detail_info > p.subj,.info > h3.subj|text","img":"meta[property=\"og:image\"]|attr:content","tags":".info > h2.genre,.detail_info > p.genre,.info > p.genre|text","first":"a#_btnEpisode|attr:href","chapter":{"sel":"li._episodeItem","label":"|attr:data-episode-no","url":"a|attr:href","at":".date|text"}}},{"id":"mangareader","meta":{"home":"home","releases":"home","titleBase":"","readerBase":"read/{titleSlug}/{lang}","searchBase":"search?keyword=","defaultLang":"en","titleIdType":"id"},"releases":{"title":{"sel":"#latest-chap .mls-wrap > .item","url":"a|attr:href","name":".manga-name a|text","chapter":{"sel":".fd-list .chapter a","label":"|text","url":"|attr:href"}}},"title":{"id":"[data-manga-id]|attr:data-manga-id","name":"#ani_detail h2.manga-name|text","img":"#ani_detail img.manga-poster-img|attr:src","type":".anisc-info .item-head|row:type","tags":".anisc-detail .genres a|text","langs":"a.c-select-lang|attr:data-code","chapter":{"sel":".chapters-list-ul > ul > li","label":"|attr:data-number","url":"a|attr:href"}},"reader":{"imgs":"","content":"#main-wrapper","imgDivs":".iv-card[data-url]","lstrip":"a.active[data-value=\"vertical\"]","lstripBtn":".dropdown-menu a[data-value=\"vertical\"]","label":".reading-list .chapter-item.active|attr:data-number","title":{"id":"[data-manga-id]|attr:data-manga-id","sel":"#header a.hr-manga","name":"h2,.manga-name|text","url":"|attr:href"},"chapter":{"sel":".reading-list.active > .chapter-item","url":"a|attr:href","label":"|attr:data-number"}}},{"404":"#notfound .notfound-404","id":"mgeko","meta":{"releases":"jumbo/manga","titleBase":"manga","readerBase":"reader","searchBase":"search/?search=","defaultLang":"en","titleIdType":"slug","chapters":"meta.reader"},"releases":{"title":{"sel":"#latest-updates .novel-list.chapters > li a","url":"|attr:href","name":"|attr:title","chapter":{"sel":"div:has(.chapter-title)","label":".chapter-title|text","at":".novel-stats span:first-child|text"}}},"title":{"name":".cover img|attr:alt","img":".cover img|[attr:data-src,attr-contain:src]","tags":".categories .property-item|text","chapter":{"sel":".chapter-list > li a","url":"|attr:href","label":".chapter-title|text","at":"time|attr:datetime"}},"reader":{"content":"#chapter-reader","label":".chapter-header .titles h2|text","next":"center .nextchap:not(.isDisabled)|attr:href","prev":"center .prevchap:not(.isDisabled)|attr:href","title":{"sel":".chapter-header .titles h1 a","name":"|text","url":"|attr:href"},"chapter":{"sel":"center center #cars option","label":"|text","url":"|attr:value"}}},{"404":"#main > .error-404","id":"mangack","meta":{"home":"home","releases":"updates","titleBase":"manga","readerBase":"chapter","searchBase":"?s=","defaultLang":"en","titleIdType":"slug"},"releases":{"title":{"sel":".latestmanga .Latest_chapter_update","url":"a|attr:href","name":".latest-title a|text","chapter":{"sel":"tr:last-child center","label":"a|text","url":"a|attr:href","at":".chapter-date|text"}}},"title":{"id":"input[name=\"follow_manga\"]|attr:value","name":"h1.entry-title|text","img":".manga-cover-wrap img|attr:src","tags":".infobox a[href*=\"/genres/\"]|text","type":".infobox a[href*=\"/comic-type/\"]|text","chapter":{"sel":".chapterslist > li","url":"a|attr:href","label":"a|text","at":".entry-date|text"}},"reader":{"content":".entry-content","label":".entry-title|text","title":{"sel":".latest-title a","name":"|text","url":"|attr:href"},"prev":".prev-post a|attr:href","next":".next-post a|attr:href"}},{"id":"katana","meta":{"releases":"latest","titleBase":"manga","readerBase":"manga/{titleSlug}","searchBase":"?search_by=book_name&search=","defaultLang":"en","titleIdType":"id"},"releases":{"title":{"sel":"#book_list > .item","id":"|attr:data-id","url":"a|attr:href","name":"a|text","chapter":{"sel":".chapter a","url":"|attr:href","label":"|text"}}},"title":{"id":".bookmark_bt[data-id]|attr:data-id","name":".info h1|text","img":".cover img|attr:src","tags":".info .genres a|text","chapter":{"sel":".chapters tbody > tr","url":"a|attr:href","label":"a|text","at":".update_time|text"}},"reader":{"content":"#imgs","label":"select[name=\"chapter_select\"] option[selected]|text","prev":".nav_button.prev:not([disabled])|attr:href","next":".nav_button.next:not([disabled])|attr:href","title":{"sel":"#breadcrumb_wrap li:nth-child(2) a","id":".bookmark_chapter_bt[data-id]|attr:data-id","name":"span|text","url":"|attr:href"},"chapter":{"sel":".nav_chapters_wrap:first-child select[name=\"chapter_select\"] option","url":"|attr:value","label":"|text"}}}]
1
+ [{"404":"#content > .wrapper > .notf img, body:empty","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","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","content":"#readerarea","id":".ctop option:selected|attr:data-id","label":"h1.entry-title|text","imgs":"#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"}}},{"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, .lastest-content .page-item-detail","id":"[data-post-id]|attr:data-post-id","name":"h3 a, .item-summary h3|text","url":"a|attr:href","chapter":{"sel":".chapter-item","label":".chapter a|text","url":".chapter a|attr:href","at":".c-new-tag|attr:title || .post-on|text"}}},"title":{"sel":"body.manga-page","id":"#manga-chapters-holder|attr:data-id || .rating-post-id|attr:value || [data-action=\"bookmark\"]|attr:data-post","name":"h1|text","img":".summary_image .img-responsive, .summary_image img, .series-img img|[attr:data-src,attr-contain:src]","tags":"a[rel=\"tag\"][href*=\"genre\"],a[rel=\"tag\"][href*=\"tag\"],.genres-content|text","type":".post-content_item .summary-heading|row:type","chapter":{"sel":"li.wp-manga-chapter, .chapter-ul > li","url":"a|attr:href","label":"a, .chapter-title-date > p|text","at":".c-new-tag|attr:title || .chapter-release-date i|text"}},"reader":{"sel":".entry-content .read-container","content":".reading-content","label":".breadcrumb li.active|text","imgs":".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","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","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:not([rel])|attr:href || a|attr:href","at":"small|text"}},"reader":{"content":"#mangareader .container-fluid, #mangareader","label":"h3|text","imgs":"#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","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","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":{"content":"#readerarea","label":"h2.entry-title|text","imgs":"#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","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","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":{"content":".reading-detail","label":"a.itemcrumb.active > span[itemprop=\"name\"]|text","imgs":".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","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","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"},"search":{"title":{"sel":".SearchFilterNav + .row > div[ng-repeat^=\"Series\"]","name":"div:nth-child(2) a.SeriesName|text","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","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,a[href$=\"/cover\"] > 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","content":".reader-container","label":"select:first-of-type option[selected]|text","imgs":".reader-container img|attr-contain:src","title":{"sel":"div > a[href*=\"/comic/\"]","name":"|text || img[alt]|attr:alt","url":"|attr:href"},"lang":"select:last-of-type|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","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":{"content":"#viewer","label":"title|text","imgs":"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","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 b|text || 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","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","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","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":{"content":"#list-image","imgDivs":".card-wrap[data-url]","label":".breadcrumb-item.active|text","imgs":"#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","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","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":{"content":"main","label":"title|text","imgs":"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":{"releases":null,"titleBase":"series/{slug}/info","readerBase":"episode","searchBase":"search?q=","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":{"content":".viewer__body","id":"div[id^=\"episode-\"][data-ep-id]|attr:data-ep-id","label":"div[id^=\"episode-\"][data-ep-scene]|attr:data-ep-scene","imgs":".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"}}},{"id":"mangafire","meta":{"home":"home","releases":"updated","titleBase":"manga","readerBase":"read/{titleSlug}/{lang}","searchBase":"filter?keyword=","defaultLang":"en","titleIdType":"id"},"releases":{"title":{"sel":".unit > .inner","id":"a[data-tip]|attr:data-tip","name":".info a|text","url":"a|attr:href","chapter":{"sel":"ul.content li a","label":"span:first-child|text","url":"|attr:href","at":"span:last-child"}}},"title":{"id":".bookmark[data-id]|attr:data-id","name":".info h1[itemprop=\"name\"]|text","img":".poster img|attr-contain:src","tags":"#info-rating a[href*=\"/genre/\"]|text","langs":".tab-content[data-name=\"chapter\"] a.dropdown-item[data-code]|attr:data-code","chapter":{"sel":".tab-content[data-name=\"chapter\"] li.item[data-number]","url":"a|attr:href","label":"|attr:data-number","at":"a span:last-child|text"}},"reader":{"imgs":"","content":"#page-wrapper","imgDivs":".page","lstrip":".setting-tab.page-layout [data-value=\"longstrip\"].active","lstripBtn":".setting-tab.page-layout [data-value=\"longstrip\"]","label":"#number-panel ul li a[href*=\"/read/\"][data-number].active|attr:data-number","title":{"sel":"#ctrl-menu .head a","id":"body|attr:data-id","url":"|attr:href","name":"|text"},"chapter":{"sel":"#number-panel ul li a[href*=\"/read/\"][data-number]","label":"|attr:data-number","url":"|attr:href"}}},{"id":"webtoon","meta":{"releases":null,"titleBase":"","readerBase":"","searchBase":"search?keyword=","defaultLang":"en","chapters":"meta.reader","titleIdType":"id"},"title":{"name":"h1.subj,.detail_info > p.subj,.info > h3.subj|text","img":"meta[property=\"og:image\"]|attr:content","tags":".info > h2.genre,.detail_info > p.genre,.info > p.genre|text","first":"a#_btnEpisode|attr:href","chapter":{"sel":"li._episodeItem","label":"|attr:data-episode-no","url":"a|attr:href","at":".date|text"}}},{"id":"mangareader","meta":{"home":"home","releases":"home","titleBase":"","readerBase":"read/{titleSlug}/{lang}","searchBase":"search?keyword=","defaultLang":"en","titleIdType":"id"},"releases":{"title":{"sel":"#latest-chap .mls-wrap > .item","url":"a|attr:href","name":".manga-name a|text","chapter":{"sel":".fd-list .chapter a","label":"|text","url":"|attr:href"}}},"title":{"id":"[data-manga-id]|attr:data-manga-id","name":"#ani_detail h2.manga-name|text","img":"#ani_detail img.manga-poster-img|attr:src","type":".anisc-info .item-head|row:type","tags":".anisc-detail .genres a|text","langs":"a.c-select-lang|attr:data-code","chapter":{"sel":".chapters-list-ul > ul > li","label":"|attr:data-number","url":"a|attr:href"}},"reader":{"imgs":"","content":"#main-wrapper","imgDivs":".iv-card[data-url]","lstrip":"a.active[data-value=\"vertical\"]","lstripBtn":".dropdown-menu a[data-value=\"vertical\"]","label":".reading-list .chapter-item.active|attr:data-number","title":{"id":"[data-manga-id]|attr:data-manga-id","sel":"#header a.hr-manga","name":"h2,.manga-name|text","url":"|attr:href"},"chapter":{"sel":".reading-list.active > .chapter-item","url":"a|attr:href","label":"|attr:data-number"}}},{"404":"#notfound .notfound-404","id":"mgeko","meta":{"releases":"jumbo/manga","titleBase":"manga","readerBase":"reader","searchBase":"search/?search=","defaultLang":"en","titleIdType":"slug","chapters":"meta.reader"},"releases":{"title":{"sel":"#latest-updates .novel-list.chapters > li a","url":"|attr:href","name":"|attr:title","chapter":{"sel":"div:has(.chapter-title)","label":".chapter-title|text","at":".novel-stats span:first-child|text"}}},"title":{"name":".cover img|attr:alt","img":".cover img|[attr:data-src,attr-contain:src]","tags":".categories .property-item|text","chapter":{"sel":".chapter-list > li a","url":"|attr:href","label":".chapter-title|text","at":"time|attr:datetime"}},"reader":{"content":"#chapter-reader","label":".chapter-header .titles h2|text","next":"center .nextchap:not(.isDisabled)|attr:href","prev":"center .prevchap:not(.isDisabled)|attr:href","title":{"sel":".chapter-header .titles h1 a","name":"|text","url":"|attr:href"},"chapter":{"sel":"center center #cars option","label":"|text","url":"|attr:value"}}},{"404":"#main > .error-404","id":"mangack","meta":{"home":"home","releases":"updates","titleBase":"manga","readerBase":"chapter","searchBase":"?s=","defaultLang":"en","titleIdType":"slug"},"releases":{"title":{"sel":".latestmanga .Latest_chapter_update","url":"a|attr:href","name":".latest-title a|text","chapter":{"sel":"tr:last-child center","label":"a|text","url":"a|attr:href","at":".chapter-date|text"}}},"title":{"id":"input[name=\"follow_manga\"]|attr:value","name":"h1.entry-title|text","img":".manga-cover-wrap img|attr:src","tags":".infobox a[href*=\"/genres/\"]|text","type":".infobox a[href*=\"/comic-type/\"]|text","chapter":{"sel":".chapterslist > li","url":"a|attr:href","label":"a|text","at":".entry-date|text"}},"reader":{"content":".entry-content","label":".entry-title|text","title":{"sel":".latest-title a","name":"|text","url":"|attr:href"},"prev":".prev-post a|attr:href","next":".next-post a|attr:href"}},{"id":"katana","meta":{"releases":"latest","titleBase":"manga","readerBase":"manga/{titleSlug}","searchBase":"?search_by=book_name&search=","defaultLang":"en","titleIdType":"id"},"releases":{"title":{"sel":"#book_list > .item","id":"|attr:data-id","url":"a|attr:href","name":"a|text","chapter":{"sel":".chapter a","url":"|attr:href","label":"|text"}}},"title":{"id":".bookmark_bt[data-id]|attr:data-id","name":".info h1|text","img":".cover img|attr:src","tags":".info .genres a|text","chapter":{"sel":".chapters tbody > tr","url":"a|attr:href","label":"a|text","at":".update_time|text"}},"reader":{"content":"#imgs","label":"select[name=\"chapter_select\"] option[selected]|text","prev":".nav_button.prev:not([disabled])|attr:href","next":".nav_button.next:not([disabled])|attr:href","title":{"sel":"#breadcrumb_wrap li:nth-child(2) a","id":".bookmark_chapter_bt[data-id]|attr:data-id","name":"span|text","url":"|attr:href"},"chapter":{"sel":".nav_chapters_wrap:first-child select[name=\"chapter_select\"] option","url":"|attr:value","label":"|text"}}}]