trackkun-dom 0.1.0 → 0.1.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.
package/index.js CHANGED
@@ -1 +1 @@
1
- (function(W,k){typeof exports=="object"&&typeof module<"u"?k(exports):typeof define=="function"&&define.amd?define(["exports"],k):(W=typeof globalThis<"u"?globalThis:W||self,k(W._trackkun_={}))})(this,function(W){"use strict";function k(e){let t=!1;return new Promise((a,r)=>{Promise.all(e.map(async n=>{const l=await n;!t&&l&&(t=!0,a(l))})).then(()=>{t||a(void 0)})})}const oe={text:se,attr:ue,"attr-contain":ce,value:de,row:pe};function g(e,t={}){if(!e)return;const{root:a=document.documentElement,returnAll:r,preProcess:n}=t,l=et(e);if(l.length>1){for(let d=0;d<l.length;d+=1){const c=g(l[d],t);if(c!=null&&c.length)return c}return}const[i,o]=e.split("|");if(!o)return;const u=(o!=null&&o.startsWith("[")&&o.endsWith("]")?o.substring(1,o.length-1).split(","):[o]).map(d=>{const c=d.indexOf(":"),f=c!==-1;return{action:f?d.substring(0,c):d,param:f?d.substring(c+1):""}}),s=i?Array.from(a.querySelectorAll(i)):[a];if(!s.length)return r?[]:void 0;n&&n(s);const p=[];for(const d of s)for(const c of u){const f=oe[c.action],h=f(d,c.param);if(h){if(r){p.push(h);break}return h}}return r?p:void 0}function se(e){return Array.from(e.childNodes).filter(t=>t.nodeType===3).map(t=>q(t.textContent)).filter(Boolean).join(" ").trim()||q(e.textContent)}function ue(e,t){return q(e.getAttribute(t))}function ce(e,t){let a=e.getAttribute(t);if(!a){const r=e.getAttributeNames().find(n=>n.includes(t));r&&(a=e.getAttribute(r))}return q(a)}function et(e){const t=[],a=e.split("||").map(r=>r.trim()).filter(Boolean);return a.forEach((r,n)=>{if(r.includes("|")){t.push(r);return}const l=a[n+1];l&&(a[n+1]=`${r},${l}`)}),t}function de(e){return e.value}function pe(e,t){var a,r,n,l;if(!t)return;const i=(a=q(e.textContent))==null?void 0:a.toLowerCase(),o=t.toLowerCase();if(!(i!==o&&i!==`${o}:`))return q((l=(r=e.nextElementSibling)==null?void 0:r.textContent)!=null?l:(n=e.nextSibling)==null?void 0:n.textContent)}function q(e){if(e)return e?.replace(/(\n|\t)/g," ").trim()||void 0}async function gt(e,t,a){const r=await a(()=>{e=0});if(r!==void 0)return r;if(!(e<=0))return await new Promise(n=>{setTimeout(async()=>{const l=await gt(e-1,t,a);n(l)},t)})}async function B(e,t,a=0){var r;const n=(r=t.root)!=null?r:document.documentElement;return gt(t.lazy===!0?200:0,100,()=>{var l;const i=t.all===!0?Array.from(n.querySelectorAll(e)):(l=n.querySelector(e))!=null?l:void 0;return(t.all?!(i!=null&&i.length):!i)?void 0:i})}const ge=/(vol(ume|\.)?\s*(\d+))/i,fe=/(ch(ap(t(er)?|\.)?|\.)?|^#)\s*(\d+([_-~,.]\d+)?)/i,he=/\d+([_-~,.]\d+)?/,ve=/[_-~,]/,me=/^[^a-zA-Z0-9]*|[^a-zA-Z0-9]*$/g;function J(e,t){var a;if(!e||!e)return;if(!isNaN(+e))return{chap:+e};const r=e.match(ge),n=r!=null&&r[0]?e.replace(r[0],"").trim():e,l=n.match(fe),i=n.match(he),o=(a=l?.[5])!=null?a:i?.[0];if(!o)return;const u=+o.replace(ve,".");if(isNaN(u))return;const s=r?.[3],p=s&&!isNaN(+s)?+s:void 0,d=n.replace((l||i)[0],"").replace(me,""),c=t&&d.startsWith(t)?d.replace(t,""):d;return{vol:p,chap:u,label:c||void 0}}var ye=Object.defineProperty,ft=Object.getOwnPropertySymbols,be=Object.prototype.hasOwnProperty,we=Object.prototype.propertyIsEnumerable,ht=(e,t,a)=>t in e?ye(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,Pe=(e,t)=>{for(var a in t||(t={}))be.call(t,a)&&ht(e,a,t[a]);if(ft)for(var a of ft(t))we.call(t,a)&&ht(e,a,t[a]);return e};function vt(e,t){var a,r;const n=[...t],l=[];let i=-1,o=-1;for(let s=0;s<e.length&&!(!n.length&&s>=10);s++){const p=Pe({},e[s]),d=n.findIndex(h=>h.slug===p.slug&&h.name===p.name),c=d===-1?void 0:n.splice(d,1)[0],f=!c||((a=c.chapters[0])==null?void 0:a.chap)!==((r=p.chapters[0])==null?void 0:r.chap);d!==-1&&(o=s),f&&(i=s,p.changed=!0),l.push(p)}if(i===-1)return[];if(n.length&&n.length!==t.length){const s=Math.max(10,o+1);l.splice(s);for(let p=o+1;p<l.length;p++)l[p].changed=!1;return l}const u=Math.min(Math.max(i+1,10),Math.max(o+1,100));return l.slice(0,u)}const Oe=[{regex:/(sec|giây)/,seconds:1},{regex:/(min|phút)/,seconds:60},{regex:/(hour|giờ)/,seconds:3600},{regex:/(day|ngày)/,seconds:86400},{regex:/(week|tuần)/,seconds:604800},{regex:/(month|tháng)/,seconds:2592e3},{regex:/(year|năm)/,seconds:31536e3}];function at(e){const t=e?.toLowerCase();if(!t||t.includes("now"))return Date.now();if(t.includes("yesterday"))return Date.now()-864e5;const a=new Date(t);if(a instanceof Date){const l=a.valueOf();if(!isNaN(l))return a.getHours()===0&&a.getMinutes()===0?Math.min(Date.now(),l+432e5):l}const r=Oe.find(l=>l.regex.test(t));if(!r)return;const n=t.split(" ").filter(Boolean);for(let l=0;l<n.length;l++){const i=n[l],o=i==="a"||i==="an"?1:+i;if(!o)continue;if(o<0)return;const u=Date.now()-o*r.seconds*1e3;return u>0?u:void 0}}function rt(e,t){if(!e)return"/";const a=e.replace("{titleSlug}",t),r=a.endsWith("/")?a:a+"/";return r.startsWith("/")?r:"/"+r}var Se=(e=>(e[e.reading=1]="reading",e[e.paused=2]="paused",e[e.plan=3]="plan",e[e.completed=4]="completed",e[e.dropped=5]="dropped",e[e.deleted=6]="deleted",e))(Se||{}),Y=(e=>(e[e.none=0]="none",e[e.removeLastSegment=1]="removeLastSegment",e[e.removeIdAfterLastDash=2]="removeIdAfterLastDash",e[e.removeIdBeforeFirstDash=3]="removeIdBeforeFirstDash",e))(Y||{}),mt=(e=>(e[e.none=0]="none",e[e.removePage=1]="removePage",e))(mt||{}),nt=(e=>(e.id="id",e.name="name",e.slug="slug",e))(nt||{}),$e=(e=>(e[e.string=1]="string",e[e.number=2]="number",e[e.bool=3]="bool",e[e.selection=4]="selection",e))($e||{}),Me=(e=>(e[e.pending=0]="pending",e[e.completed=1]="completed",e[e.offline=2]="offline",e[e.incompat=3]="incompat",e))(Me||{}),Re=(e=>(e[e.releases=1]="releases",e[e.img=2]="img",e))(Re||{});function F({basePath:e,fullPath:t,siteMeta:a}){if(!t)return;const r=t.startsWith(e)?t.replace(e,""):t;switch(a.readerSlugTransformer){case mt.removePage:return r.replace(/-page-\d{1,3}\.html$/,".html");default:return r}}function yt(e,{removeTrailingSlash:t=!0}={}){if(!e)return;const a=t&&e.endsWith("/")?e.slice(0,-1):e;try{return new URL(a)}catch{return}}function D(e){var t,a;if(!(!e||typeof e!="string"))return e.startsWith("http://")||e.startsWith("https://")?(t=yt(e))==null?void 0:t.pathname:e.startsWith("//")?(a=yt(`https:${e}`))==null?void 0:a.pathname:e}var je=Object.defineProperty,De=Object.defineProperties,xe=Object.getOwnPropertyDescriptors,bt=Object.getOwnPropertySymbols,Ne=Object.prototype.hasOwnProperty,Te=Object.prototype.propertyIsEnumerable,wt=(e,t,a)=>t in e?je(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,Be=(e,t)=>{for(var a in t||(t={}))Ne.call(t,a)&&wt(e,a,t[a]);if(bt)for(var a of bt(t))Te.call(t,a)&&wt(e,a,t[a]);return e},Ue=(e,t)=>De(e,xe(t));async function I(e,{root:t=document.documentElement,titleSlug:a="",titleName:r,lazy:n=!0,siteMeta:l}){var i;if(!e)return;const o=[],u=await B(e.sel,{root:t,all:!0,lazy:n});if(!(u!=null&&u.length))return o;const s=(u??[]).map(v=>({id:g(e.id,{root:v}),label:g(e.label,{root:v}),url:g(e.url,{root:v}),at:g(e.at,{root:v})})),p=s.map(({label:v})=>J(v,r)),d=(i=p[1])==null?void 0:i.chap;!p[0]&&(d===void 0||d<=1)&&(p[0]={label:s[0].label,chap:0});const c=rt(l.readerBase,a),f=l.readerBase.split("/").indexOf("{lang}"),h=f!==-1;return p.forEach((v,m)=>{var y;if(!v)return;const{id:O,url:w,at:S}=s[m],P=D(w),$=h?P?.substring(1).split("/")[f]:void 0,x=F({basePath:$?c.replace("{lang}",$):c,fullPath:P,siteMeta:l});x&&o.push(Ue(Be({},v),{id:O,slug:x,lang:$,ts:at(S)||((y=o[o.length+1])==null?void 0:y.ts)||Date.now()}))}),C(o)}function C(e){return e.sort((t,a)=>t.vol===void 0||a.vol===void 0?a.chap-t.chap:a.vol-t.vol||a.chap-t.chap),Ae(e)}function Ae(e){let t;for(let a=e.length-1;a>=0;a--){const r=e[a];r.vol!==void 0?t=r.vol:t!==void 0&&(r.inferVol=t)}return e}function Z(e,t){if(!(t!=null&&t.length))return;const a={};e.forEach(({id:n,name:l,altNames:i})=>{a[lt(l)]=n,i&&i.forEach(o=>{a[lt(o)]=n})});const r=t.map(n=>a[lt(n)]).filter(Boolean);return r.length===0?void 0:Array.from(new Set(r)).sort((n,l)=>n-l)}function lt(e){const t=e.toLowerCase().replaceAll(" ","");return t[t.length-1]==="s"?t.substring(0,t.length-1):t}function K(e,t=location.origin){if(!e)return;const a=e.startsWith("//")?`${location.protocol}${e}`:e;return a.startsWith(t)?a.replace(t,""):a}function L({url:e,siteMeta:t}){var a;if(typeof e!="string")return;const r=t.titleSlugTransformer,n=(a=D(e))==null?void 0:a.split("/").filter(Boolean);if(!n||!n.length)return e;const l=n[n.length-1];switch(r){case Y.removeLastSegment:return n.length>2?n[n.length-2]:l;case Y.removeIdAfterLastDash:{const i=l.lastIndexOf("-"),o=+l.substring(i+1);return i===-1||isNaN(o)||o<1e4?l:l.substring(0,i)}case Y.removeIdBeforeFirstDash:{const i=l.indexOf("-"),o=+l.substring(0,i);return i===-1||isNaN(o)||o<1e3?l:l.substring(i+1)}default:return l}}var M=(e=>(e.title="title",e.reader="reader",e.update="update",e.search="search",e))(M||{}),Ie=Object.defineProperty,Le=Object.defineProperties,Ee=Object.getOwnPropertyDescriptors,Q=Object.getOwnPropertySymbols,Pt=Object.prototype.hasOwnProperty,Ot=Object.prototype.propertyIsEnumerable,St=(e,t,a)=>t in e?Ie(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,it=(e,t)=>{for(var a in t||(t={}))Pt.call(t,a)&&St(e,a,t[a]);if(Q)for(var a of Q(t))Ot.call(t,a)&&St(e,a,t[a]);return e},$t=(e,t)=>Le(e,Ee(t)),Mt=(e,t)=>{var a={};for(var r in e)Pt.call(e,r)&&t.indexOf(r)<0&&(a[r]=e[r]);if(e!=null&&Q)for(var r of Q(e))t.indexOf(r)<0&&Ot.call(e,r)&&(a[r]=e[r]);return a};const Ce='link[rel="shortcut icon"]|attr:href || link[rel="icon"]|attr:href';let ze=class H{constructor(t){this.methodsMap={[M.title]:()=>this.getRawTitleData(),[M.reader]:()=>this.getRawReaderData(),[M.update]:()=>this.getRawUpdateData(),[M.search]:()=>this.getRawSearchData()},this.spec=t.spec,this.siteMeta=t.siteMeta,this.tags=t.tags,this.oldRawUpdates=t.oldRawUpdates}async getRawPageByType(t){var a;const r=await this.methodsMap[t](),n=location.origin+location.pathname;return{type:t,is404:H._is404Page(this.spec),specId:this.spec.id,siteName:g(this.spec.name),favicon:(a=g(Ce))==null?void 0:a.replace(location.origin,""),url:n,data:r}}async getRawUpdateData(){var t,a;if(!((a=(t=this.spec)==null?void 0:t.update)!=null&&a.title))return;const r=this.spec.update.title,{chapter:n}=r,l=Mt(r,["chapter"]);if(!l.sel||!l.name||!(n!=null&&n.sel)||!(n!=null&&n.label))return;const i=await B(l.sel,{lazy:!0,all:!0});if(!(i!=null&&i.length))return;const o=i.slice(0,100).map(s=>{const p=g(l.url,{root:s}),d=D(p),c=g(l.name,{root:s}),f=g(l.at,{root:s});if(!(!d||!c))return{titleEl:s,id:g(l.id,{root:s}),path:d,img:K(g(l.img,{root:s})),name:c,lang:g(l.lang,{root:s}),at:f?at(f):void 0}}).filter(Boolean);if(!o.length)return;const u=await Promise.all(o.map(async s=>{var p;const d=s,{path:c,titleEl:f,lang:h,at:v}=d,m=Mt(d,["path","titleEl","lang","at"]),y=L({url:c,siteMeta:this.siteMeta}),O=(p=await I(n,{siteMeta:this.siteMeta,root:f,titleSlug:y,titleName:m?.name}))!=null?p:[];return it({slug:y,chapters:h||v?O.map(w=>{var S,P;return $t(it({},w),{lang:(S=w.lang)!=null?S:h,ts:(P=w.ts)!=null?P:v})}):O},m)}));return this.finalizeRawUpdateData({rawUpdates:u})}async getRawTitleData(){var t,a;if(!((t=this.spec)!=null&&t.title))return;const r=this.spec.title;if(!r.sel||!r.name||!await B(r.sel,{lazy:!!this.spec.title.lazy}))return;const n=g(r.name);if(!n)return;const l=L({url:location.pathname,siteMeta:this.siteMeta});if(!l)return;let i=(a=g(r.tags,{returnAll:!0}))!=null?a:[];i.length===1&&(i=i[0].split(",").map(s=>s.trim()).filter(Boolean));const o=g(r.type),u=g(r.langs,{returnAll:!0});return{id:g(r.id),url:location.origin+location.pathname,slug:l,name:n,langs:u!=null&&u.length?u:r.langs&&this.siteMeta.defaultLang?[this.siteMeta.defaultLang]:void 0,tags:Z(this.tags,[...i??[],...o?[o]:[]]),img:K(g(r.img)),chapters:await I(r.chapter,{siteMeta:this.siteMeta,lazy:!0,titleSlug:l,titleName:n})}}async getRawReaderData(){var t,a,r,n,l;const{spec:i,siteMeta:o}=this;if(!(i!=null&&i.reader)||!await H.isReaderPage(i.reader))return;const u=i.reader.title,s=document.querySelector(u.sel);if(!s)return;const p=g(u.name,{root:s}),d=g(u.url,{root:s}),c=L({url:d,siteMeta:o});if(!p||!d||!c)return;const f=await I((t=i.reader)==null?void 0:t.chapter,{titleSlug:c,titleName:p,siteMeta:o}),h=(a=g(i.reader.label))==null?void 0:a.toLowerCase().replace(p.toLowerCase(),"");if(!h)return;const{vol:v,chap:m=0}=J(h,p)||{};let y;const O=(r=g(i.reader.img,{returnAll:!0,preProcess(b){const R=b.map(j=>+(j.getAttribute("height")||0)/+(j.getAttribute("width")||1));R.some(j=>j>2.5)?y=!0:R.filter(Boolean).length>Math.max(1,R.length-2)&&(y=!1)}}))!=null?r:[];if(!O.length)return;const w=rt(o.readerBase,c),S=o.readerBase.split("/").indexOf("{lang}"),P=S!==-1?location.pathname.substring(1).split("/")[S]:void 0,$=P?w.replace("{lang}",P):w,x=(n=P??g(i.reader.lang))!=null?n:i.reader.lang?this.siteMeta.defaultLang:void 0;return{isWebtoon:y,vol:v,inferVol:(l=f?.find(b=>b.vol===v&&b.chap===m))==null?void 0:l.inferVol,chap:m,lang:x,slug:F({basePath:$,fullPath:location.pathname,siteMeta:o}),nextSlug:H._findNeighborSlug({sel:i.reader.next,basePath:$,siteMeta:o}),prevSlug:H._findNeighborSlug({sel:i.reader.prev,basePath:$,siteMeta:o}),basePath:$,imgs:O,imgsLocator:i.reader.img,title:{id:g(u.id),url:d,slug:c,name:p,langs:x?[x]:void 0,chapters:f}}}async getRawSearchData(){var t;const{spec:a,siteMeta:r}=this,n=(t=a.search)==null?void 0:t.title;if(!n)return;const{chapter:l}=n,i=[];return await Promise.all(Array.from(document.querySelectorAll(n.sel)).map(async o=>{var u;const s=g(n.url,{root:o}),p=D(s),d=g(n.name,{root:o}),c=L({url:p,siteMeta:r});!p||!d||!c||i.push({slug:c,img:g(n.img,{root:o}),name:d,chapters:(u=await I(l,{root:o,siteMeta:r,titleSlug:c,titleName:d}))!=null?u:[]})})),i.length?{rawUpdates:i}:void 0}finalizeRawUpdateData(t){var a,r;const n=(r=(a=this.spec.update)==null?void 0:a.title)!=null&&r.lang?this.siteMeta.defaultLang:void 0,l=_e(t.rawUpdates,n);if(l.length)return{rawUpdates:this.oldRawUpdates?vt(l,this.oldRawUpdates):l}}static async isReaderPage(t){const{sel:a,img:r}=t;if(!a||!r||!await B(a,{lazy:!!t.lazy}))return!1;const n=et(r).map(l=>l.split("|")[0]).join(",");return!!await B(n,{lazy:!0})}static _findNeighborSlug({sel:t,basePath:a,siteMeta:r}){const n=g(t);if(!(!n||n.startsWith("#")||n.startsWith("/#")))return F({basePath:a,fullPath:D(n),siteMeta:r})}static _is404Page(t){return t[404]&&document.querySelector(t[404])?!0:document.title.toLowerCase().includes("not found")}};function _e(e,t){const a={};return e.forEach(r=>{Object.values(r.chapters.reduce((n,l)=>{const i=l.lang||t||"default";return n[i]||(n[i]=[]),n[i].push(l),n},{})).forEach(n=>{var l,i;const o=(i=(l=n[0])==null?void 0:l.lang)!=null?i:t,u=`${r.slug}:${o||""}`;a[u]?(a[u].chapters.push(...n),C(a[u].chapters)):a[u]=$t(it({},r),{lang:o})})}),Object.values(a)}function We(){return Math.random().toString(16).slice(2)}async function ke({addListener:e,removeListener:t,transform:a,filter:r,handler:n,onTimeout:l,timeout:i,once:o}){return new Promise(u=>{e(d);const s=()=>o===!0&&t(d),p=i?setTimeout(()=>{s(),u(void 0),l?.()},i):void 0;async function d(c,...f){c=a?a(c):c,c!==void 0&&(!r||r(c,...f))&&(s(),u(c),n?.(c,...f),p&&clearTimeout(p))}})}var qe=Object.defineProperty,Rt=Object.getOwnPropertySymbols,Ve=Object.prototype.hasOwnProperty,Fe=Object.prototype.propertyIsEnumerable,jt=(e,t,a)=>t in e?qe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,He=(e,t)=>{for(var a in t||(t={}))Ve.call(t,a)&&jt(e,a,t[a]);if(Rt)for(var a of Rt(t))Fe.call(t,a)&&jt(e,a,t[a]);return e};async function Je(e){const t=await ke(He({addListener:a=>window.addEventListener("message",a),removeListener:a=>window.removeEventListener("message",a)},e));return t?.data}async function Ye(e){var t;const{receiverWindow:a,timeout:r,targetOrigin:n,event:l,args:i}=e,o={reqId:We(),event:l,args:i};(t=a||window)==null||t.postMessage(o,n??"*");const u=await Je({filter:s=>{var p;return((p=s?.data)==null?void 0:p.resId)===o.reqId},timeout:r??3e4,once:!0});return u?.result}const U={isAny:!0};function N(e,...t){return Ye({event:"tk:fetchResult",args:{baseUrl:e,segments:t}})}function Ze(e){if(e)try{return JSON.parse(e)}catch{return}}var Ke=Object.defineProperty,Qe=Object.defineProperties,Xe=Object.getOwnPropertyDescriptors,X=Object.getOwnPropertySymbols,Dt=Object.prototype.hasOwnProperty,xt=Object.prototype.propertyIsEnumerable,Nt=(e,t,a)=>t in e?Ke(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,ot=(e,t)=>{for(var a in t||(t={}))Dt.call(t,a)&&Nt(e,a,t[a]);if(X)for(var a of X(t))xt.call(t,a)&&Nt(e,a,t[a]);return e},Tt=(e,t)=>Qe(e,Xe(t)),Bt=(e,t)=>{var a={};for(var r in e)Dt.call(e,r)&&t.indexOf(r)<0&&(a[r]=e[r]);if(e!=null&&X)for(var r of X(e))t.indexOf(r)<0&&xt.call(e,r)&&(a[r]=e[r]);return a};const Ge='link[rel="shortcut icon"]|attr:href || link[rel="icon"]|attr:href';class A{constructor(t){this.methodsMap={[M.title]:()=>this.getRawTitleData(),[M.reader]:()=>this.getRawReaderData(),[M.update]:()=>this.getRawUpdateData(),[M.search]:()=>this.getRawSearchData()},this.spec=t.spec,this.siteMeta=t.siteMeta,this.tags=t.tags,this.oldRawUpdates=t.oldRawUpdates}async getRawPageByType(t){var a;const r=await this.methodsMap[t](),n=location.origin+location.pathname;return{type:t,is404:A._is404Page(this.spec),specId:this.spec.id,siteName:g(this.spec.name),favicon:(a=g(Ge))==null?void 0:a.replace(location.origin,""),url:n,data:r}}async getRawUpdateData(){var t,a;if(!((a=(t=this.spec)==null?void 0:t.update)!=null&&a.title))return;const r=this.spec.update.title,{chapter:n}=r,l=Bt(r,["chapter"]);if(!l.sel||!l.name||!(n!=null&&n.sel)||!(n!=null&&n.label))return;const i=await B(l.sel,{lazy:!0,all:!0});if(!(i!=null&&i.length))return;const o=i.slice(0,100).map(s=>{const p=g(l.url,{root:s}),d=D(p),c=g(l.name,{root:s}),f=g(l.at,{root:s});if(!(!d||!c))return{titleEl:s,id:g(l.id,{root:s}),path:d,img:K(g(l.img,{root:s})),name:c,lang:g(l.lang,{root:s}),at:f?at(f):void 0}}).filter(Boolean);if(!o.length)return;const u=await Promise.all(o.map(async s=>{var p;const d=s,{path:c,titleEl:f,lang:h,at:v}=d,m=Bt(d,["path","titleEl","lang","at"]),y=L({url:c,siteMeta:this.siteMeta}),O=(p=await I(n,{siteMeta:this.siteMeta,root:f,titleSlug:y,titleName:m?.name}))!=null?p:[];return ot({slug:y,chapters:h||v?O.map(w=>{var S,P;return Tt(ot({},w),{lang:(S=w.lang)!=null?S:h,ts:(P=w.ts)!=null?P:v})}):O},m)}));return this.finalizeRawUpdateData({rawUpdates:u})}async getRawTitleData(){var t,a;if(!((t=this.spec)!=null&&t.title))return;const r=this.spec.title;if(!r.sel||!r.name||!await B(r.sel,{lazy:!!this.spec.title.lazy}))return;const n=g(r.name);if(!n)return;const l=L({url:location.pathname,siteMeta:this.siteMeta});if(!l)return;let i=(a=g(r.tags,{returnAll:!0}))!=null?a:[];i.length===1&&(i=i[0].split(",").map(s=>s.trim()).filter(Boolean));const o=g(r.type),u=g(r.langs,{returnAll:!0});return{id:g(r.id),url:location.origin+location.pathname,slug:l,name:n,langs:u!=null&&u.length?u:r.langs&&this.siteMeta.defaultLang?[this.siteMeta.defaultLang]:void 0,tags:Z(this.tags,[...i??[],...o?[o]:[]]),img:K(g(r.img)),chapters:await I(r.chapter,{siteMeta:this.siteMeta,lazy:!0,titleSlug:l,titleName:n})}}async getRawReaderData(){var t,a,r,n,l;const{spec:i,siteMeta:o}=this;if(!(i!=null&&i.reader)||!await A.isReaderPage(i.reader))return;const u=i.reader.title,s=document.querySelector(u.sel);if(!s)return;const p=g(u.name,{root:s}),d=g(u.url,{root:s}),c=L({url:d,siteMeta:o});if(!p||!d||!c)return;const f=await I((t=i.reader)==null?void 0:t.chapter,{titleSlug:c,titleName:p,siteMeta:o}),h=(a=g(i.reader.label))==null?void 0:a.toLowerCase().replace(p.toLowerCase(),"");if(!h)return;const{vol:v,chap:m=0}=J(h,p)||{};let y;const O=(r=g(i.reader.img,{returnAll:!0,preProcess(b){const R=b.map(j=>+(j.getAttribute("height")||0)/+(j.getAttribute("width")||1));R.some(j=>j>2.5)?y=!0:R.filter(Boolean).length>Math.max(1,R.length-2)&&(y=!1)}}))!=null?r:[];if(!O.length)return;const w=rt(o.readerBase,c),S=o.readerBase.split("/").indexOf("{lang}"),P=S!==-1?location.pathname.substring(1).split("/")[S]:void 0,$=P?w.replace("{lang}",P):w,x=(n=P??g(i.reader.lang))!=null?n:i.reader.lang?this.siteMeta.defaultLang:void 0;return{isWebtoon:y,vol:v,inferVol:(l=f?.find(b=>b.vol===v&&b.chap===m))==null?void 0:l.inferVol,chap:m,lang:x,slug:F({basePath:$,fullPath:location.pathname,siteMeta:o}),nextSlug:A._findNeighborSlug({sel:i.reader.next,basePath:$,siteMeta:o}),prevSlug:A._findNeighborSlug({sel:i.reader.prev,basePath:$,siteMeta:o}),basePath:$,imgs:O,imgsLocator:i.reader.img,title:{id:g(u.id),url:d,slug:c,name:p,langs:x?[x]:void 0,chapters:f}}}async getRawSearchData(){var t;const{spec:a,siteMeta:r}=this,n=(t=a.search)==null?void 0:t.title;if(!n)return;const{chapter:l}=n,i=[];return await Promise.all(Array.from(document.querySelectorAll(n.sel)).map(async o=>{var u;const s=g(n.url,{root:o}),p=D(s),d=g(n.name,{root:o}),c=L({url:p,siteMeta:r});!p||!d||!c||i.push({slug:c,img:g(n.img,{root:o}),name:d,chapters:(u=await I(l,{root:o,siteMeta:r,titleSlug:c,titleName:d}))!=null?u:[]})})),i.length?{rawUpdates:i}:void 0}finalizeRawUpdateData(t){var a,r;const n=(r=(a=this.spec.update)==null?void 0:a.title)!=null&&r.lang?this.siteMeta.defaultLang:void 0,l=ta(t.rawUpdates,n);if(l.length)return{rawUpdates:this.oldRawUpdates?vt(l,this.oldRawUpdates):l}}static async isReaderPage(t){const{sel:a,img:r}=t;if(!a||!r||!await B(a,{lazy:!!t.lazy}))return!1;const n=et(r).map(l=>l.split("|")[0]).join(",");return!!await B(n,{lazy:!0})}static _findNeighborSlug({sel:t,basePath:a,siteMeta:r}){const n=g(t);if(!(!n||n.startsWith("#")||n.startsWith("/#")))return F({basePath:a,fullPath:D(n),siteMeta:r})}static _is404Page(t){return t[404]&&document.querySelector(t[404])?!0:document.title.toLowerCase().includes("not found")}}function ta(e,t){const a={};return e.forEach(r=>{Object.values(r.chapters.reduce((n,l)=>{const i=l.lang||t||"default";return n[i]||(n[i]=[]),n[i].push(l),n},{})).forEach(n=>{var l,i;const o=(i=(l=n[0])==null?void 0:l.lang)!=null?i:t,u=`${r.slug}:${o||""}`;a[u]?(a[u].chapters.push(...n),C(a[u].chapters)):a[u]=Tt(ot({},r),{lang:o})})}),Object.values(a)}var ea=Object.defineProperty,aa=Object.defineProperties,ra=Object.getOwnPropertyDescriptors,Ut=Object.getOwnPropertySymbols,na=Object.prototype.hasOwnProperty,la=Object.prototype.propertyIsEnumerable,At=(e,t,a)=>t in e?ea(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,st=(e,t)=>{for(var a in t||(t={}))na.call(t,a)&&At(e,a,t[a]);if(Ut)for(var a of Ut(t))la.call(t,a)&&At(e,a,t[a]);return e},ut=(e,t)=>aa(e,ra(t));class It extends A{async getRawUpdateData(){const t="https://api.comick.app/",[a]=await Promise.all([N(t,"chapter")]);if(!a)return;const r=a.map(n=>{var l,i;const{vol:o,chap:u,hid:s,lang:p,updated_at:d,md_comics:c}=n,f=typeof u=="string"&&!isNaN(+u)?+u:void 0;if(typeof f!="number")return;const h=(i=(l=c.md_covers)==null?void 0:l[0])==null?void 0:i.b2key;return{id:c.id+"",slug:c.slug,name:c.title,img:typeof h=="string"?`https://meo.comick.pictures/${h}`:void 0,chapters:[{slug:s,vol:typeof o=="string"&&!isNaN(+o)?+o:void 0,chap:f,lang:p,ts:new Date(d).valueOf()}]}}).filter(Boolean);return super.finalizeRawUpdateData({rawUpdates:r})}async getRawTitleData(){var t,a,r,n;const l=await super.getRawTitleData();if(!l)return l;const i="https://api.comick.app/",[o]=await Promise.all([N(i,"comic",U,"chapters")]);if(!o)return l;const u=await ia(l.slug),s=[];o.chapters.forEach(c=>{const{vol:f,chap:h,hid:v,lang:m,updated_at:y}=c,O=typeof h=="string"&&!isNaN(+h)?+h:void 0;typeof O!="number"||s.some(w=>w.vol==f&&w.chap===O&&w.lang===m)||s.push({slug:v,vol:typeof f=="string"&&!isNaN(+f)?+f:void 0,chap:O,lang:m,ts:new Date(y).valueOf()})});const p=g("h1 ~ div.text-sm span:first-child|row:demographic"),d=p?(t=Z(this.tags,[p]))==null?void 0:t[0]:void 0;return d&&!((a=l.tags)!=null&&a.includes(d))&&((r=l.tags)==null||r.push(d),(n=l.tags)==null||n.sort((c,f)=>c-f)),ut(st({},l),{id:u,hasMoreChapters:o.chapters.length<o.total,chapters:C(s)})}async getRawReaderData(){var t;const a=await super.getRawReaderData();if(!a)return a;const r=await N("/_next/data/",U,"comic",U),n=(t=r?.comic)==null?void 0:t.id;return ut(st({},a),{title:ut(st({},a.title),{id:n?n+"":void 0})})}}It.specId="comick";async function ia(e){var t,a,r,n,l,i,o;const u=(t=document.querySelector("script#__NEXT_DATA__"))==null?void 0:t.textContent,s=u?Ze(u):void 0;if(((a=s?.query)==null?void 0:a.slug)===e){const c=(l=(n=(r=s?.props)==null?void 0:r.pageProps)==null?void 0:n.comic)==null?void 0:l.id;return c?c+"":void 0}const p=await N("/_next/data/",U,"comic",e,"covers.json"),d=(o=(i=p?.pageProps)==null?void 0:i.comic)==null?void 0:o.id;return d?d+"":void 0}var oa=Object.defineProperty,sa=Object.defineProperties,ua=Object.getOwnPropertyDescriptors,Lt=Object.getOwnPropertySymbols,ca=Object.prototype.hasOwnProperty,da=Object.prototype.propertyIsEnumerable,Et=(e,t,a)=>t in e?oa(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,Ct=(e,t)=>{for(var a in t||(t={}))ca.call(t,a)&&Et(e,a,t[a]);if(Lt)for(var a of Lt(t))da.call(t,a)&&Et(e,a,t[a]);return e},zt=(e,t)=>sa(e,ua(t));class _t extends A{async getRawUpdateData(){const t="https://api.mangadex.org/",[a,r]=await Promise.all([N(t,"chapter"),N(t,"manga")]);if(!r||!a)return;const n={};r.data.forEach(({id:i,relationships:o})=>{var u;const s=o.find(({type:d})=>d==="cover_art"),p=(u=s?.attributes)==null?void 0:u.fileName;p&&(n[i]=`https://mangadex.org/covers/${i}/${p}`)});const l=a.data.map(({relationships:i,attributes:o,id:u})=>{const s=i.find(({type:c})=>c==="manga"),p=typeof o.volume=="string"?+o.volume:void 0,d=typeof o.chapter=="string"?+o.chapter:void 0;if(d)return{slug:s.id,name:Object.values(s.attributes.title)[0],img:n[s.id],chapters:[{slug:o.externalUrl||u,label:o.title||void 0,vol:p,chap:d,lang:o.translatedLanguage,ts:new Date(o.readableAt).valueOf()}]}}).filter(Boolean);return super.finalizeRawUpdateData({rawUpdates:l})}async getRawTitleData(){var t,a,r;const n="https://api.mangadex.org/manga/",[l,i]=await Promise.all([N(n,U),N(n,U,"feed")]);if(!l||!i)return;const o=(r=(a=(t=i.data)==null?void 0:t.map)==null?void 0:a.call(t,p=>{const{attributes:d,id:c}=p;if(typeof d!="object"||typeof c!="string"||!c)return;const{externalUrl:f,title:h,volume:v,chapter:m,translatedLanguage:y}=d;return{slug:f||c,label:h||void 0,vol:typeof v=="string"?+v:void 0,chap:typeof m=="string"?+m:void 0,lang:y||"en",ts:new Date(d.readableAt).valueOf()}}).filter(p=>p?.chap!=null))!=null?r:[],{data:u}=l;if(!u)return;const s=Wt({data:u,entryTags:this.tags});if(s)return zt(Ct({},s),{chapters:C(o),hasMoreChapters:(i.total||0)>(i.limit||0)})}async getRawReaderData(){var t,a,r,n,l,i,o,u,s,p,d,c,f,h,v;const m="https://api.mangadex.org/",[y,O,w]=await Promise.all([N(m,"chapter",U),N(m,"at-home","server",U),N(m,"manga",U,"aggregate")]);if(!y||!O||!w)return;const S=y.data,{volume:P,chapter:$,externalUrl:x,translatedLanguage:b}=S.attributes||{},{baseUrl:R,chapter:{data:j,dataSaver:Ua,hash:Aa}}=O,ne=(a=(t=S.relationships)==null?void 0:t.find)==null?void 0:a.call(t,T=>T.type==="manga");if(!ne)return;const le=Wt({data:ne,entryTags:this.tags});if(!le||typeof w.volumes!="object")return;const E=Object.values(w.volumes).map(({volume:T,chapters:Ca})=>{const za=T==="none"||typeof T!="string"?void 0:+T;return Object.values(Ca).map(({id:_a,chapter:pt})=>typeof pt!="string"||pt==="none"?void 0:{vol:za,chap:+pt,slug:_a})}).flat().filter(Boolean).reverse();if(typeof $!="string"||$==="none"){if(E.length)return;E.push({chap:0,slug:S.id})}C(E);const dt=E.findIndex(T=>T.slug===S.id),tt=(n=(r=S.relationships)==null?void 0:r.find)==null?void 0:n.call(r,T=>T.type==="scanlation_group"),Ia=R.endsWith("/")?R:R+"/",ie=!!((i=(l=localStorage.getItem("md"))==null?void 0:l.includes)!=null&&i.call(l,'"dataSaver":true')),La=`${Ia}${ie?"data-saver":"data"}/`,Ea=(p=(s=(u=(o=ie?Ua:j)!=null?o:[]).map)==null?void 0:s.call(u,T=>`${La}${Aa}/${T}`))!=null?p:[];return{externalUrl:x,vol:typeof P=="string"?+P:void 0,inferVol:(d=E[dt])==null?void 0:d.inferVol,chap:+$||0,imgs:Ea,lang:b,slug:S.id,prevSlug:(c=E[dt+1])==null?void 0:c.slug,nextSlug:(f=E[dt-1])==null?void 0:f.slug,basePath:"/chapter/",groupName:(h=tt?.attributes)==null?void 0:h.name,groupUrl:(v=tt?.attributes)==null?void 0:v.website,title:zt(Ct({},le),{chapters:E})}}}_t.specId="mangadex";function Wt({data:e,entryTags:t}){var a,r,n,l,i;const{id:o,attributes:u,relationships:s}=e;if(!o||typeof o!="string"||typeof u!="object")return;const{title:p,availableTranslatedLanguages:d,altTitles:c,tags:f,contentRating:h}=u;if(typeof p!="object"||!Array.isArray(d))return;const v=Object.values(p)[0];if(!v||typeof v!="string")return;const m=pa(),y=(r=(a=d?.map)==null?void 0:a.call(d,b=>typeof b=="string"?b:void 0).filter(Boolean))!=null?r:[],O=y.filter(b=>b&&(!m||m.includes(b))),w=(n=c?.map)==null?void 0:n.call(c,b=>{const[[R,j]=[]]=Object.entries(b);return{lang:R,name:j}}),S=(l=s?.find)==null?void 0:l.call(s,b=>b.type==="cover_art"),P=(i=S?.attributes)==null?void 0:i.fileName,$=P?`https://mangadex.org/covers/${o}/${P}`:void 0,x=(f||[]).map(b=>{var R,j;return(j=(R=b?.attributes)==null?void 0:R.name)==null?void 0:j.en}).concat(h).filter(Boolean);return{url:`${location.origin}/title/${o}`,slug:o,name:v,altNames:w,langs:O.length>0?O:y,img:$,tags:Z(t,x),isWebtoon:f?.some(b=>b.attributes.name.en==="Long Strip")}}function pa(){var e;const t=localStorage.getItem("md");if(t)try{const a=JSON.parse(t),r=(e=a?.userPreferences)==null?void 0:e.filteredLanguages;return r!=null&&r.length?r:void 0}catch{return}}function kt(e,t){const a=e[0]===t?e.substring(1):e;return a[a.length-1]===t?a.substring(0,a.length-1):a}var ga=Object.defineProperty,fa=Object.defineProperties,ha=Object.getOwnPropertyDescriptors,qt=Object.getOwnPropertySymbols,va=Object.prototype.hasOwnProperty,ma=Object.prototype.propertyIsEnumerable,Vt=(e,t,a)=>t in e?ga(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,z=(e,t)=>{for(var a in t||(t={}))va.call(t,a)&&Vt(e,a,t[a]);if(qt)for(var a of qt(t))ma.call(t,a)&&Vt(e,a,t[a]);return e},V=(e,t)=>fa(e,ha(t));class Ft extends A{async getRawUpdateData(){const t=await super.getRawUpdateData();if(t)return V(z({},t),{siteMeta:ba(this.spec.update,this.siteMeta)})}async getRawTitleData(){var t;const a=await super.getRawTitleData();if(!a)return;const r=_(location.pathname);let n;if((t=a.chapters)!=null&&t.length){const l=this.spec.title.chapter,i=document.querySelector(l.sel),o=D(g(l.url,{root:i}));o&&(n=_(o))}return V(z({},a),{siteMeta:G(this.siteMeta,{titleBase:r,readerBase:n})})}async getRawReaderData(){const t=await super.getRawReaderData();if(t)return V(z({},t),{siteMeta:G(this.siteMeta,{titleBase:_(D(t.title.url)),readerBase:_(location.pathname),idBase:Ht()}),title:V(z({},t.title),{id:ya()})})}async getRawSearchData(){const t=await super.getRawSearchData();if(!t)return;const a=this.spec.search.title,r=document.querySelector(a.sel),n=g(a.url,{root:r});return V(z({},t),{siteMeta:G(this.siteMeta,{titleBase:_(D(n)),idBase:Ht()})})}}Ft.specId="mangastream";function ya(){var e,t;const a=(t=(e=window.HISTORY)==null?void 0:e.getStored)==null?void 0:t.call(e);if(!a||typeof a!="object")return;const r=Object.values(a).filter(Boolean);if(r.length)return r.sort((n,l)=>l.time-n.time),r[0].manga_ID}function ba(e,t){var a,r;if(!e)return;const n=V(z({},t),{updatePath:kt(location.pathname,"/")}),l=e.title,i=(a=document.querySelector(l.sel))!=null?a:void 0;if(!i)return;const o=D(g(l.url,{root:i}));if(o===void 0)return;const u=(r=i.querySelector(l.chapter.sel))!=null?r:void 0;if(!u)return;const s=D(g(l.chapter.url,{root:u}));if(s!==void 0)return n.titleBase=_(o),n.readerBase=_(s),t.titleIdType===nt.id&&(g(l.id,{root:i})||(t.titleIdType=nt.name)),G(t,n)}function Ht(){return document.querySelector('link[rel="shortlink"][href*="/?p="]')?"?p=":void 0}function G(e,t){const a=Object.keys(t),r=z({},e);let n=!1;return a.forEach(l=>{const i=t[l];i!==e[l]&&(r[l]=i,n=!0)}),n?r:void 0}function _(e){return kt(e,"/").split("/").slice(0,-1).join("/")}var wa=Object.defineProperty,Pa=Object.defineProperties,Oa=Object.getOwnPropertyDescriptors,Jt=Object.getOwnPropertySymbols,Sa=Object.prototype.hasOwnProperty,$a=Object.prototype.propertyIsEnumerable,Yt=(e,t,a)=>t in e?wa(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,ct=(e,t)=>{for(var a in t||(t={}))Sa.call(t,a)&&Yt(e,a,t[a]);if(Jt)for(var a of Jt(t))$a.call(t,a)&&Yt(e,a,t[a]);return e},Zt=(e,t)=>Pa(e,Oa(t));class Kt extends A{async getRawReaderData(){const t=await super.getRawReaderData();if(!t)return t;let a=t.title.id;if(!a){const r=this.spec.reader.title;r.id&&await B(r.id.split("|")[0],{lazy:!0}),a=g(r.id)}return Zt(ct({},t),{title:Zt(ct({},t.title),{id:a,chapters:await Ma(a)})})}}Kt.specId="nettruyen";async function Ma(e){var t;if(!e)return;const a=await fetch(`/Comic/Services/ComicService.asmx/ProcessChapterList?comicId=${e}`).then(r=>r.status===200?r.json():void 0).catch(()=>[]);if((t=a?.chapters)!=null&&t.length)return C(a.chapters.map(r=>{const{name:n,url:l}=r,i=J(n);if(!(!i||!l))return ct({slug:D(l).split("/").filter(Boolean).slice(2).join("/")},i)}))}const Ra=[It,_t,Ft,Kt];function Qt(e){var t;const a=(t=Ra.find(r=>r.specId===e.spec.id))!=null?t:ze;return new a(e)}var ja=Object.defineProperty,Da=Object.defineProperties,xa=Object.getOwnPropertyDescriptors,Xt=Object.getOwnPropertySymbols,Na=Object.prototype.hasOwnProperty,Ta=Object.prototype.propertyIsEnumerable,Gt=(e,t,a)=>t in e?ja(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,te=(e,t)=>{for(var a in t||(t={}))Na.call(t,a)&&Gt(e,a,t[a]);if(Xt)for(var a of Xt(t))Ta.call(t,a)&&Gt(e,a,t[a]);return e},ee=(e,t)=>Da(e,xa(t));async function Ba(e){var t,a;const{spec:r}=e;if(r){const n=(t=e.siteMeta)!=null?t:r.meta,l=e.type?[e.type]:ae(n,r.generic);if(!l.length)return;const i=Qt(ee(te({},e),{spec:r,siteMeta:n}));return await k(l.map(o=>i.getRawPageByType(o)))}return await k(((a=e.genericSpecs)!=null?a:[]).map(n=>{const l=ae(n.meta,n.generic);if(!l.length)return[];const i=Qt(ee(te({},e),{spec:n,siteMeta:n.meta}));return l.map(o=>i.getRawPageByType(o))}).flat())}function ae(e,t){if(location.pathname==="/")return[];const{titleBase:a,readerBase:r}=e,n=location.pathname.split("/").filter(Boolean),l=re(n,r),i=re(n,a);if(l!==i)return l>i?[M.reader]:[M.title];if(l>0)return[M.reader,M.title];if(n.length===1){const o=[!r&&M.reader,!a&&M.title].filter(Boolean);if(o.length)return o}return t?[M.reader,M.title]:[]}function re(e,t){if(!t)return 0;const a=t.split("/").filter(Boolean);return e.length<=a.length?0:a.filter((r,n)=>e[n]===r||r==="{titleSlug}"||r==="{lang}").length}W.PageType=M,W.scrape=Ba});
1
+ (function(z,W){typeof exports=="object"&&typeof module<"u"?W(exports):typeof define=="function"&&define.amd?define(["exports"],W):(z=typeof globalThis<"u"?globalThis:z||self,W(z._trackkun_={}))})(this,function(z){"use strict";function W(a){let t=!1;return new Promise((e,r)=>{Promise.all(a.map(async n=>{const l=await n;!t&&l&&(t=!0,e(l))})).then(()=>{t||e(void 0)})})}const pe={text:de,attr:ge,"attr-contain":he,value:fe,row:ve};function g(a,t={}){if(!a)return;const{root:e=document.documentElement,returnAll:r,preProcess:n}=t,l=X(a);if(l.length>1){for(let p=0;p<l.length;p+=1){const d=g(l[p],t);if(d!=null&&d.length)return d}return}const[o,i]=a.split("|");if(!i)return;const c=(i!=null&&i.startsWith("[")&&i.endsWith("]")?i.substring(1,i.length-1).split(","):[i]).map(p=>{const d=p.indexOf(":"),h=d!==-1;return{action:h?p.substring(0,d):p,param:h?p.substring(d+1):""}}),s=o?Array.from(e.querySelectorAll(o)):[e];if(!s.length)return r?[]:void 0;n&&n(s);const u=[];for(const p of s)for(const d of c){const h=pe[d.action],v=h(p,d.param);if(v){if(r){u.push(v);break}return v}}return r?u:void 0}function de(a){return Array.from(a.childNodes).filter(t=>t.nodeType===3).map(t=>q(t.textContent)).filter(Boolean).join(" ").trim()||q(a.textContent)}function ge(a,t){return q(a.getAttribute(t))}function he(a,t){let e=a.getAttribute(t);if(!e){const r=a.getAttributeNames().find(n=>n.includes(t));r&&(e=a.getAttribute(r))}return q(e)}function X(a){const t=[],e=a.split("||").map(r=>r.trim()).filter(Boolean);return e.forEach((r,n)=>{if(r.includes("|")){t.push(r);return}const l=e[n+1];l&&(e[n+1]=`${r},${l}`)}),t}function fe(a){return a.value}function ve(a,t){var e,r,n,l;if(!t)return;const o=(e=q(a.textContent))==null?void 0:e.toLowerCase(),i=t.toLowerCase();if(!(o!==i&&o!==`${i}:`))return q((l=(r=a.nextElementSibling)==null?void 0:r.textContent)!=null?l:(n=a.nextSibling)==null?void 0:n.textContent)}function q(a){if(a)return a?.replace(/(\n|\t)/g," ").trim()||void 0}async function dt(a,t,e){const r=await e(()=>{a=0});if(r!==void 0)return r;if(!(a<=0))return await new Promise(n=>{setTimeout(async()=>{const l=await dt(a-1,t,e);n(l)},t)})}async function C(a,t,e=0){var r;const n=(r=t.root)!=null?r:document.documentElement;return dt(t.lazy===!0?200:0,100,()=>{var l;const o=t.all===!0?Array.from(n.querySelectorAll(a)):(l=n.querySelector(a))!=null?l:void 0;return(t.all?!(o!=null&&o.length):!o)?void 0:o})}const me=/(vol(ume|\.)?\s*(\d+))/i,ye=/(ch(ap(t(er)?|\.)?|\.)?|^#)\s*(\d+([_-~,.]\d+)?)/i,we=/\d+([_-~,.]\d+)?/,be=/[_-~,]/,Oe=/^[^a-zA-Z0-9]*|[^a-zA-Z0-9]*$/g;function V(a,t){var e;if(!a||!a)return;if(!isNaN(+a))return{chap:+a};const r=a.match(me),n=r!=null&&r[0]?a.replace(r[0],"").trim():a,l=n.match(ye),o=n.match(we),i=(e=l?.[5])!=null?e:o?.[0];if(!i)return;const c=+i.replace(be,".");if(isNaN(c))return;const s=r?.[3],u=s&&!isNaN(+s)?+s:void 0,p=n.replace((l||o)[0],"").replace(Oe,""),d=t&&p.startsWith(t)?p.replace(t,""):p;return{vol:u,chap:c,label:d||void 0}}var Re=Object.defineProperty,gt=Object.getOwnPropertySymbols,Se=Object.prototype.hasOwnProperty,$e=Object.prototype.propertyIsEnumerable,ht=(a,t,e)=>t in a?Re(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,Pe=(a,t)=>{for(var e in t||(t={}))Se.call(t,e)&&ht(a,e,t[e]);if(gt)for(var e of gt(t))$e.call(t,e)&&ht(a,e,t[e]);return a};function ft(a,t){var e,r;const n=[...t],l=[];let o=-1,i=-1;for(let s=0;s<a.length&&!(!n.length&&s>=10);s++){const u=Pe({},a[s]),p=n.findIndex(v=>v.slug===u.slug&&v.name===u.name),d=p===-1?void 0:n.splice(p,1)[0],h=!d||((e=d.chapters[0])==null?void 0:e.chap)!==((r=u.chapters[0])==null?void 0:r.chap);p!==-1&&(i=s),h&&(o=s,u.changed=!0),l.push(u)}if(o===-1)return[];if(n.length&&n.length!==t.length){const s=Math.max(10,i+1);l.splice(s);for(let u=i+1;u<l.length;u++)l[u].changed=!1;return l}const c=Math.min(Math.max(o+1,10),Math.max(i+1,100));return l.slice(0,c)}function G(a,t){if(!(t!=null&&t.length))return;const e={};a.forEach(({id:n,name:l,altNames:o})=>{e[tt(l)]=n,o&&o.forEach(i=>{e[tt(i)]=n})});const r=t.map(n=>e[tt(n)]).filter(Boolean);return r.length===0?void 0:Array.from(new Set(r)).sort((n,l)=>n-l)}function tt(a){const t=a.toLowerCase().replaceAll(" ","");return t[t.length-1]==="s"?t.substring(0,t.length-1):t}function A(a){return a.sort((t,e)=>t.vol===void 0||e.vol===void 0?e.chap-t.chap:e.vol-t.vol||e.chap-t.chap),De(a)}function De(a){let t;for(let e=a.length-1;e>=0;e--){const r=a[e];r.vol!==void 0?t=r.vol:t!==void 0&&(r.inferVol=t)}return a}var je=Object.defineProperty,xe=Object.defineProperties,Te=Object.getOwnPropertyDescriptors,vt=Object.getOwnPropertySymbols,Ce=Object.prototype.hasOwnProperty,Ne=Object.prototype.propertyIsEnumerable,mt=(a,t,e)=>t in a?je(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,Me=(a,t)=>{for(var e in t||(t={}))Ce.call(t,e)&&mt(a,e,t[e]);if(vt)for(var e of vt(t))Ne.call(t,e)&&mt(a,e,t[e]);return a},Ue=(a,t)=>xe(a,Te(t));function yt(a,t){const e={};return a.forEach(r=>{Object.values(r.chapters.reduce((n,l)=>{const o=l.lang||t||"default";return n[o]||(n[o]=[]),n[o].push(l),n},{})).forEach(n=>{var l,o;const i=(o=(l=n[0])==null?void 0:l.lang)!=null?o:t,c=`${r.slug}:${i||""}`;e[c]?(e[c].chapters.push(...n),A(e[c].chapters)):e[c]=Ue(Me({},r),{lang:i})})}),Object.values(e)}const Be=[{regex:/(sec|giây)/,seconds:1},{regex:/(min|phút)/,seconds:60},{regex:/(hour|giờ)/,seconds:3600},{regex:/(day|ngày)/,seconds:86400},{regex:/(week|tuần)/,seconds:604800},{regex:/(month|tháng)/,seconds:2592e3},{regex:/(year|năm)/,seconds:31536e3}];function F(a){const t=a?.toLowerCase();if(!t||t.includes("now"))return Date.now();if(t.includes("yesterday"))return Date.now()-864e5;const e=new Date(t);if(e instanceof Date){const l=e.valueOf();if(!isNaN(l))return e.getHours()===0&&e.getMinutes()===0?Math.min(Date.now(),l+432e5):l}const r=Be.find(l=>l.regex.test(t));if(!r)return;const n=t.split(" ").filter(Boolean);for(let l=0;l<n.length;l++){const o=n[l],i=o==="a"||o==="an"?1:+o;if(!i)continue;if(i<0)return;const c=Date.now()-i*r.seconds*1e3;return c>0?c:void 0}}function H(a,t=location.origin){if(!a)return;const e=a.startsWith("//")?`${location.protocol}${a}`:a;return e.startsWith(t)?e.replace(t,""):e}function J(a,t){if(!a)return"/";const e=a.replace("{titleSlug}",t),r=e.endsWith("/")?e:e+"/";return r.startsWith("/")?r:"/"+r}function wt(a,{removeTrailingSlash:t=!0}={}){if(!a)return;const e=t&&a.endsWith("/")?a.slice(0,-1):a;try{return new URL(e)}catch{return}}function D(a){var t,e;if(!(!a||typeof a!="string"))return a.startsWith("http://")||a.startsWith("https://")?(t=wt(a))==null?void 0:t.pathname:a.startsWith("//")?(e=wt(`https:${a}`))==null?void 0:e.pathname:a}var j=(a=>(a.title="title",a.reader="reader",a.update="update",a.search="search",a))(j||{}),_e=Object.defineProperty,Ie=Object.defineProperties,Ae=Object.getOwnPropertyDescriptors,Y=Object.getOwnPropertySymbols,bt=Object.prototype.hasOwnProperty,Ot=Object.prototype.propertyIsEnumerable,Rt=(a,t,e)=>t in a?_e(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,et=(a,t)=>{for(var e in t||(t={}))bt.call(t,e)&&Rt(a,e,t[e]);if(Y)for(var e of Y(t))Ot.call(t,e)&&Rt(a,e,t[e]);return a},St=(a,t)=>Ie(a,Ae(t)),$t=(a,t)=>{var e={};for(var r in a)bt.call(a,r)&&t.indexOf(r)<0&&(e[r]=a[r]);if(a!=null&&Y)for(var r of Y(a))t.indexOf(r)<0&&Ot.call(a,r)&&(e[r]=a[r]);return e};let Ee=class pt{constructor(t){this.methodsMap={[j.title]:()=>this.getRawTitleData(),[j.reader]:()=>this.getRawReaderData(),[j.update]:()=>this.getRawUpdateData(),[j.search]:()=>this.getRawSearchData()};var e;this.spec=t.spec,this.siteMeta=t.siteMeta,this.tags=t.tags,this.oldRawUpdates=t.oldRawUpdates,this.getGlobalData=(e=t.getGlobalData)!=null?e:Le}async getRawPageByType(t){const e=await this.methodsMap[t](),r=location.origin+location.pathname;return{type:t,is404:pt._is404Page(this.spec),specId:this.spec.id,siteName:g(this.spec.name),url:r,data:e}}async getRawUpdateData(){var t,e;if(!((e=(t=this.spec)==null?void 0:t.update)!=null&&e.title))return;const r=this.spec.update.title,{chapter:n}=r,l=$t(r,["chapter"]);if(!l.sel||!l.name||!(n!=null&&n.sel)||!(n!=null&&n.label))return;const o=await C(l.sel,{lazy:!0,all:!0});if(!(o!=null&&o.length))return;const i=o.slice(0,100).map(s=>{const u=g(l.url,{root:s}),p=D(u),d=g(l.name,{root:s}),h=g(l.at,{root:s});if(!(!p||!d))return{titleEl:s,id:g(l.id,{root:s}),path:p,img:H(g(l.img,{root:s})),name:d,lang:g(l.lang,{root:s}),at:h?F(h):void 0}}).filter(Boolean);if(!i.length)return;const c=await Promise.all(i.map(async s=>{var u;const p=s,{path:d,titleEl:h,lang:v,at:w}=p,f=$t(p,["path","titleEl","lang","at"]),O=this.resolveTitleSlug(d),m=(u=await this.getRawChapters(n,{root:h,titleSlug:O,titleName:f?.name}))!=null?u:[];return et({slug:O,chapters:v||w?m.map(b=>{var R,$;return St(et({},b),{lang:(R=b.lang)!=null?R:v,ts:($=b.ts)!=null?$:w})}):m},f)}));return this.finalizeRawUpdateData({rawUpdates:c})}async getRawTitleData(){var t,e,r;if(!((t=this.spec)!=null&&t.title))return;const n=this.spec.title;if(!n.sel||!n.name||!await C(n.sel,{lazy:!!this.spec.title.lazy}))return;const l=g(n.name);if(!l)return;const o=this.resolveTitleSlug(location.pathname);if(!o)return;let i=(e=g(n.tags,{returnAll:!0}))!=null?e:[];i.length===1&&(i=i[0].split(",").map(u=>u.trim()).filter(Boolean));const c=g(n.type),s=g(n.langs,{returnAll:!0});return{id:g(n.id),url:location.origin+location.pathname,slug:o,name:l,langs:s!=null&&s.length?s:n.langs&&this.siteMeta.defaultLang?[this.siteMeta.defaultLang]:void 0,tags:G(this.tags,[...i??[],...c?[c]:[]]),img:H(g(n.img)),chapters:(r=await this.getRawChapters(n.chapter,{lazy:!0,titleSlug:o,titleName:l}))!=null?r:[]}}async getRawReaderData(){var t,e,r,n,l,o;const{spec:i,siteMeta:c}=this;if(!(i!=null&&i.reader)||!await pt._isReaderPage(i.reader))return;const s=i.reader.title,u=document.querySelector(s.sel);if(!u)return;const p=g(s.name,{root:u}),d=g(s.url,{root:u}),h=this.resolveTitleSlug(d);if(!p||!d||!h)return;const v=(e=await this.getRawChapters((t=i.reader)==null?void 0:t.chapter,{titleSlug:h,titleName:p}))!=null?e:[],w=(r=g(i.reader.label))==null?void 0:r.toLowerCase().replace(p.toLowerCase(),"");if(!w)return;const{vol:f,chap:O=0}=V(w,p)||{};let m;const b=(n=g(i.reader.img,{returnAll:!0,preProcess(x){const T=x.map(M=>+(M.getAttribute("height")||0)/+(M.getAttribute("width")||1));T.some(M=>M>2.5)?m=!0:T.filter(Boolean).length>Math.max(1,T.length-2)&&(m=!1)}}))!=null?n:[];if(!b.length)return;const R=J(c.readerBase,h),$=c.readerBase.split("/").indexOf("{lang}"),S=$!==-1?location.pathname.substring(1).split("/")[$]:void 0,P=S?R.replace("{lang}",S):R,y=(l=S??g(i.reader.lang))!=null?l:i.reader.lang?this.siteMeta.defaultLang:void 0;return{isWebtoon:m,vol:f,inferVol:(o=v.find(x=>x.vol===f&&x.chap===O))==null?void 0:o.inferVol,chap:O,lang:y,slug:this.resolveReaderSlug(P,location.pathname),nextSlug:this._findNeighborSlug({sel:i.reader.next,basePath:P}),prevSlug:this._findNeighborSlug({sel:i.reader.prev,basePath:P}),basePath:P,imgs:b,imgsLocator:i.reader.img,title:{id:g(s.id),url:d,slug:h,name:p,langs:y?[y]:void 0,chapters:v}}}async getRawSearchData(){var t;const e=(t=this.spec.search)==null?void 0:t.title;if(!e)return;const{chapter:r}=e,n=[];return await Promise.all(Array.from(document.querySelectorAll(e.sel)).map(async l=>{var o;const i=g(e.url,{root:l}),c=D(i),s=g(e.name,{root:l}),u=this.resolveTitleSlug(c);!c||!s||!u||n.push({slug:u,img:g(e.img,{root:l}),name:s,chapters:(o=await this.getRawChapters(r,{root:l,titleSlug:u,titleName:s}))!=null?o:[]})})),n.length?{rawUpdates:n}:void 0}async getRawChapters(t,{root:e=document.documentElement,titleSlug:r="",titleName:n,lazy:l=!0}){var o;if(!t)return;const i=[],c=await C(t.sel,{root:e,all:!0,lazy:l});if(!(c!=null&&c.length))return i;const s=(c??[]).map(f=>({id:g(t.id,{root:f}),label:g(t.label,{root:f}),url:g(t.url,{root:f}),at:g(t.at,{root:f})})),u=s.map(({label:f})=>V(f,n)),p=(o=u[1])==null?void 0:o.chap;!u[0]&&(p===void 0||p<=1)&&(u[0]={label:s[0].label,chap:0});const{readerBase:d}=this.siteMeta,h=J(d,r),v=d.split("/").indexOf("{lang}"),w=v!==-1;return u.forEach((f,O)=>{var m;if(!f)return;const{id:b,url:R,at:$}=s[O],S=D(R);if(!S)return;const P=w?S?.substring(1).split("/")[v]:void 0,y=this.resolveReaderSlug(P?h.replace("{lang}",P):h,S);i.push(St(et({},f),{id:b,slug:y,lang:P,ts:F($)||((m=i[i.length+1])==null?void 0:m.ts)||Date.now()}))}),A(i)}resolveReaderSlug(t,e){return e.startsWith(t)?e.replace(t,""):e}resolveTitleSlug(t){var e;if(typeof t!="string")return;const r=(e=D(t))==null?void 0:e.split("/").filter(Boolean);return!r||!r.length?t:r[r.length-1]}finalizeRawUpdateData(t){var e,r;const n=(r=(e=this.spec.update)==null?void 0:e.title)!=null&&r.lang?this.siteMeta.defaultLang:void 0,l=yt(t.rawUpdates,n);if(l.length)return{rawUpdates:this.oldRawUpdates?ft(l,this.oldRawUpdates):l}}static async _isReaderPage(t){const{sel:e,img:r}=t;if(!e||!r||!await C(e,{lazy:!!t.lazy}))return!1;const n=X(r).map(l=>l.split("|")[0]).join(",");return!!await C(n,{lazy:!0})}_findNeighborSlug({sel:t,basePath:e}){const r=g(t);if(!r||r.startsWith("#")||r.startsWith("/#"))return;const n=D(r);return n?this.resolveReaderSlug(e,n):void 0}static _is404Page(t){return t[404]&&document.querySelector(t[404])?!0:document.title.toLowerCase().includes("not found")}};async function Le(a){let t=window;const e={__html__:document.documentElement};for(let r=0;r<a.length;r++){const{attr:n,args:l}=a[r];if(!(n in t))return;t=l?t[n](...l.map(o=>{var i;return(i=e[o])!=null?i:o})):t[n]}return t===window?void 0:t}var ze=Object.defineProperty,We=Object.defineProperties,qe=Object.getOwnPropertyDescriptors,Z=Object.getOwnPropertySymbols,Pt=Object.prototype.hasOwnProperty,Dt=Object.prototype.propertyIsEnumerable,jt=(a,t,e)=>t in a?ze(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,at=(a,t)=>{for(var e in t||(t={}))Pt.call(t,e)&&jt(a,e,t[e]);if(Z)for(var e of Z(t))Dt.call(t,e)&&jt(a,e,t[e]);return a},xt=(a,t)=>We(a,qe(t)),Tt=(a,t)=>{var e={};for(var r in a)Pt.call(a,r)&&t.indexOf(r)<0&&(e[r]=a[r]);if(a!=null&&Z)for(var r of Z(a))t.indexOf(r)<0&&Dt.call(a,r)&&(e[r]=a[r]);return e};class B{constructor(t){this.methodsMap={[j.title]:()=>this.getRawTitleData(),[j.reader]:()=>this.getRawReaderData(),[j.update]:()=>this.getRawUpdateData(),[j.search]:()=>this.getRawSearchData()};var e;this.spec=t.spec,this.siteMeta=t.siteMeta,this.tags=t.tags,this.oldRawUpdates=t.oldRawUpdates,this.getGlobalData=(e=t.getGlobalData)!=null?e:ke}async getRawPageByType(t){const e=await this.methodsMap[t](),r=location.origin+location.pathname;return{type:t,is404:B._is404Page(this.spec),specId:this.spec.id,siteName:g(this.spec.name),url:r,data:e}}async getRawUpdateData(){var t,e;if(!((e=(t=this.spec)==null?void 0:t.update)!=null&&e.title))return;const r=this.spec.update.title,{chapter:n}=r,l=Tt(r,["chapter"]);if(!l.sel||!l.name||!(n!=null&&n.sel)||!(n!=null&&n.label))return;const o=await C(l.sel,{lazy:!0,all:!0});if(!(o!=null&&o.length))return;const i=o.slice(0,100).map(s=>{const u=g(l.url,{root:s}),p=D(u),d=g(l.name,{root:s}),h=g(l.at,{root:s});if(!(!p||!d))return{titleEl:s,id:g(l.id,{root:s}),path:p,img:H(g(l.img,{root:s})),name:d,lang:g(l.lang,{root:s}),at:h?F(h):void 0}}).filter(Boolean);if(!i.length)return;const c=await Promise.all(i.map(async s=>{var u;const p=s,{path:d,titleEl:h,lang:v,at:w}=p,f=Tt(p,["path","titleEl","lang","at"]),O=this.resolveTitleSlug(d),m=(u=await this.getRawChapters(n,{root:h,titleSlug:O,titleName:f?.name}))!=null?u:[];return at({slug:O,chapters:v||w?m.map(b=>{var R,$;return xt(at({},b),{lang:(R=b.lang)!=null?R:v,ts:($=b.ts)!=null?$:w})}):m},f)}));return this.finalizeRawUpdateData({rawUpdates:c})}async getRawTitleData(){var t,e,r;if(!((t=this.spec)!=null&&t.title))return;const n=this.spec.title;if(!n.sel||!n.name||!await C(n.sel,{lazy:!!this.spec.title.lazy}))return;const l=g(n.name);if(!l)return;const o=this.resolveTitleSlug(location.pathname);if(!o)return;let i=(e=g(n.tags,{returnAll:!0}))!=null?e:[];i.length===1&&(i=i[0].split(",").map(u=>u.trim()).filter(Boolean));const c=g(n.type),s=g(n.langs,{returnAll:!0});return{id:g(n.id),url:location.origin+location.pathname,slug:o,name:l,langs:s!=null&&s.length?s:n.langs&&this.siteMeta.defaultLang?[this.siteMeta.defaultLang]:void 0,tags:G(this.tags,[...i??[],...c?[c]:[]]),img:H(g(n.img)),chapters:(r=await this.getRawChapters(n.chapter,{lazy:!0,titleSlug:o,titleName:l}))!=null?r:[]}}async getRawReaderData(){var t,e,r,n,l,o;const{spec:i,siteMeta:c}=this;if(!(i!=null&&i.reader)||!await B._isReaderPage(i.reader))return;const s=i.reader.title,u=document.querySelector(s.sel);if(!u)return;const p=g(s.name,{root:u}),d=g(s.url,{root:u}),h=this.resolveTitleSlug(d);if(!p||!d||!h)return;const v=(e=await this.getRawChapters((t=i.reader)==null?void 0:t.chapter,{titleSlug:h,titleName:p}))!=null?e:[],w=(r=g(i.reader.label))==null?void 0:r.toLowerCase().replace(p.toLowerCase(),"");if(!w)return;const{vol:f,chap:O=0}=V(w,p)||{};let m;const b=(n=g(i.reader.img,{returnAll:!0,preProcess(x){const T=x.map(M=>+(M.getAttribute("height")||0)/+(M.getAttribute("width")||1));T.some(M=>M>2.5)?m=!0:T.filter(Boolean).length>Math.max(1,T.length-2)&&(m=!1)}}))!=null?n:[];if(!b.length)return;const R=J(c.readerBase,h),$=c.readerBase.split("/").indexOf("{lang}"),S=$!==-1?location.pathname.substring(1).split("/")[$]:void 0,P=S?R.replace("{lang}",S):R,y=(l=S??g(i.reader.lang))!=null?l:i.reader.lang?this.siteMeta.defaultLang:void 0;return{isWebtoon:m,vol:f,inferVol:(o=v.find(x=>x.vol===f&&x.chap===O))==null?void 0:o.inferVol,chap:O,lang:y,slug:this.resolveReaderSlug(P,location.pathname),nextSlug:this._findNeighborSlug({sel:i.reader.next,basePath:P}),prevSlug:this._findNeighborSlug({sel:i.reader.prev,basePath:P}),basePath:P,imgs:b,imgsLocator:i.reader.img,title:{id:g(s.id),url:d,slug:h,name:p,langs:y?[y]:void 0,chapters:v}}}async getRawSearchData(){var t;const e=(t=this.spec.search)==null?void 0:t.title;if(!e)return;const{chapter:r}=e,n=[];return await Promise.all(Array.from(document.querySelectorAll(e.sel)).map(async l=>{var o;const i=g(e.url,{root:l}),c=D(i),s=g(e.name,{root:l}),u=this.resolveTitleSlug(c);!c||!s||!u||n.push({slug:u,img:g(e.img,{root:l}),name:s,chapters:(o=await this.getRawChapters(r,{root:l,titleSlug:u,titleName:s}))!=null?o:[]})})),n.length?{rawUpdates:n}:void 0}async getRawChapters(t,{root:e=document.documentElement,titleSlug:r="",titleName:n,lazy:l=!0}){var o;if(!t)return;const i=[],c=await C(t.sel,{root:e,all:!0,lazy:l});if(!(c!=null&&c.length))return i;const s=(c??[]).map(f=>({id:g(t.id,{root:f}),label:g(t.label,{root:f}),url:g(t.url,{root:f}),at:g(t.at,{root:f})})),u=s.map(({label:f})=>V(f,n)),p=(o=u[1])==null?void 0:o.chap;!u[0]&&(p===void 0||p<=1)&&(u[0]={label:s[0].label,chap:0});const{readerBase:d}=this.siteMeta,h=J(d,r),v=d.split("/").indexOf("{lang}"),w=v!==-1;return u.forEach((f,O)=>{var m;if(!f)return;const{id:b,url:R,at:$}=s[O],S=D(R);if(!S)return;const P=w?S?.substring(1).split("/")[v]:void 0,y=this.resolveReaderSlug(P?h.replace("{lang}",P):h,S);i.push(xt(at({},f),{id:b,slug:y,lang:P,ts:F($)||((m=i[i.length+1])==null?void 0:m.ts)||Date.now()}))}),A(i)}resolveReaderSlug(t,e){return e.startsWith(t)?e.replace(t,""):e}resolveTitleSlug(t){var e;if(typeof t!="string")return;const r=(e=D(t))==null?void 0:e.split("/").filter(Boolean);return!r||!r.length?t:r[r.length-1]}finalizeRawUpdateData(t){var e,r;const n=(r=(e=this.spec.update)==null?void 0:e.title)!=null&&r.lang?this.siteMeta.defaultLang:void 0,l=yt(t.rawUpdates,n);if(l.length)return{rawUpdates:this.oldRawUpdates?ft(l,this.oldRawUpdates):l}}static async _isReaderPage(t){const{sel:e,img:r}=t;if(!e||!r||!await C(e,{lazy:!!t.lazy}))return!1;const n=X(r).map(l=>l.split("|")[0]).join(",");return!!await C(n,{lazy:!0})}_findNeighborSlug({sel:t,basePath:e}){const r=g(t);if(!r||r.startsWith("#")||r.startsWith("/#"))return;const n=D(r);return n?this.resolveReaderSlug(e,n):void 0}static _is404Page(t){return t[404]&&document.querySelector(t[404])?!0:document.title.toLowerCase().includes("not found")}}async function ke(a){let t=window;const e={__html__:document.documentElement};for(let r=0;r<a.length;r++){const{attr:n,args:l}=a[r];if(!(n in t))return;t=l?t[n](...l.map(o=>{var i;return(i=e[o])!=null?i:o})):t[n]}return t===window?void 0:t}class Ct extends B{resolveTitleSlug(t){var e;return(e=D(t))==null?void 0:e.split("/").filter(Boolean)[1]}}Ct.specId="bato";function Ve(){return Math.random().toString(16).slice(2)}async function Ge({addListener:a,removeListener:t,transform:e,filter:r,handler:n,onTimeout:l,timeout:o,once:i}){return new Promise(c=>{a(p);const s=()=>i===!0&&t(p),u=o?setTimeout(()=>{s(),c(void 0),l?.()},o):void 0;async function p(d,...h){d=e?e(d):d,d!==void 0&&(!r||r(d,...h))&&(s(),c(d),n?.(d,...h),u&&clearTimeout(u))}})}var Fe=Object.defineProperty,Nt=Object.getOwnPropertySymbols,He=Object.prototype.hasOwnProperty,Je=Object.prototype.propertyIsEnumerable,Mt=(a,t,e)=>t in a?Fe(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,Ye=(a,t)=>{for(var e in t||(t={}))He.call(t,e)&&Mt(a,e,t[e]);if(Nt)for(var e of Nt(t))Je.call(t,e)&&Mt(a,e,t[e]);return a};async function Ze(a){const t=await Ge(Ye({addListener:e=>window.addEventListener("message",e),removeListener:e=>window.removeEventListener("message",e)},a));return t?.data}async function Ke(a){var t;const{receiverWindow:e,timeout:r,targetOrigin:n,event:l,args:o}=a,i={reqId:Ve(),event:l,args:o};(t=e||window)==null||t.postMessage(i,n??"*");const c=await Ze({filter:s=>{var u;return((u=s?.data)==null?void 0:u.resId)===i.reqId},timeout:r??3e4,once:!0});return c?.result}const _={isAny:!0};function N(a,...t){return Ke({event:"tk:fetchResult",args:{baseUrl:a,segments:t}})}function Qe(a){if(a)try{return JSON.parse(a)}catch{return}}var Xe=Object.defineProperty,ta=Object.defineProperties,ea=Object.getOwnPropertyDescriptors,Ut=Object.getOwnPropertySymbols,aa=Object.prototype.hasOwnProperty,ra=Object.prototype.propertyIsEnumerable,Bt=(a,t,e)=>t in a?Xe(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,rt=(a,t)=>{for(var e in t||(t={}))aa.call(t,e)&&Bt(a,e,t[e]);if(Ut)for(var e of Ut(t))ra.call(t,e)&&Bt(a,e,t[e]);return a},nt=(a,t)=>ta(a,ea(t));class _t extends B{async getRawUpdateData(){const t="https://api.comick.app/",[e]=await Promise.all([N(t,"chapter")]);if(!e)return;const r=e.map(n=>{var l,o;const{vol:i,chap:c,hid:s,lang:u,updated_at:p,md_comics:d}=n,h=typeof c=="string"&&!isNaN(+c)?+c:void 0;if(typeof h!="number")return;const v=(o=(l=d.md_covers)==null?void 0:l[0])==null?void 0:o.b2key;return{id:d.id+"",slug:d.slug,name:d.title,img:typeof v=="string"?`https://meo.comick.pictures/${v}`:void 0,chapters:[{slug:s,vol:typeof i=="string"&&!isNaN(+i)?+i:void 0,chap:h,lang:u,ts:new Date(p).valueOf()}]}}).filter(Boolean);return super.finalizeRawUpdateData({rawUpdates:r})}async getRawTitleData(){var t,e,r,n;const l=await super.getRawTitleData();if(!l)return l;const o="https://api.comick.app/",[i]=await Promise.all([N(o,"comic",_,"chapters")]);if(!i)return l;const c=await na(l.slug),s=[];i.chapters.forEach(d=>{const{vol:h,chap:v,hid:w,lang:f,updated_at:O}=d,m=typeof v=="string"&&!isNaN(+v)?+v:void 0;typeof m!="number"||s.some(b=>b.vol==h&&b.chap===m&&b.lang===f)||s.push({slug:w,vol:typeof h=="string"&&!isNaN(+h)?+h:void 0,chap:m,lang:f,ts:new Date(O).valueOf()})});const u=g("h1 ~ div.text-sm span:first-child|row:demographic"),p=u?(t=G(this.tags,[u]))==null?void 0:t[0]:void 0;return p&&!((e=l.tags)!=null&&e.includes(p))&&((r=l.tags)==null||r.push(p),(n=l.tags)==null||n.sort((d,h)=>d-h)),nt(rt({},l),{id:c,hasMoreChapters:i.chapters.length<i.total,chapters:A(s)})}async getRawReaderData(){var t;const e=await super.getRawReaderData();if(!e)return e;const r=await N("/_next/data/",_,"comic",_),n=(t=r?.comic)==null?void 0:t.id;return nt(rt({},e),{title:nt(rt({},e.title),{id:n?n+"":void 0})})}}_t.specId="comick";async function na(a){var t,e,r,n,l,o,i;const c=(t=document.querySelector("script#__NEXT_DATA__"))==null?void 0:t.textContent,s=c?Qe(c):void 0;if(((e=s?.query)==null?void 0:e.slug)===a){const d=(l=(n=(r=s?.props)==null?void 0:r.pageProps)==null?void 0:n.comic)==null?void 0:l.id;return d?d+"":void 0}const u=await N("/_next/data/",_,"comic",a,"covers.json"),p=(i=(o=u?.pageProps)==null?void 0:o.comic)==null?void 0:i.id;return p?p+"":void 0}var la=Object.defineProperty,ia=Object.defineProperties,oa=Object.getOwnPropertyDescriptors,It=Object.getOwnPropertySymbols,sa=Object.prototype.hasOwnProperty,ua=Object.prototype.propertyIsEnumerable,At=(a,t,e)=>t in a?la(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,lt=(a,t)=>{for(var e in t||(t={}))sa.call(t,e)&&At(a,e,t[e]);if(It)for(var e of It(t))ua.call(t,e)&&At(a,e,t[e]);return a},it=(a,t)=>ia(a,oa(t));class Et extends B{resolveReaderSlug(t,e){return super.resolveReaderSlug(t,e).replace(/-page-\d{1,3}\.html$/,".html")}async getRawTitleData(){const t=await super.getRawTitleData();return t&&it(lt({},t),{chapters:Lt(await this.getVM(),t.slug)})}async getRawReaderData(){const t=await super.getRawReaderData();if(!t)return t;const e=await this.getVM();return it(lt({},t),{imgs:ca(e,t.imgs[0]),title:it(lt({},t.title),{chapters:Lt(e,t.title.slug)})})}getVM(){return this.getGlobalData([{attr:"angular"},{attr:"element",args:["__html__"]},{attr:"scope",args:[]},{attr:"vm"}])}}Et.specId="manga4life";function Lt(a,t){var e,r;return((r=(e=a?.Chapters)!=null?e:a?.CHAPTERS)!=null?r:[]).map(n=>{const l=+n.Chapter.substring(1)/10;return{slug:`${t}-chapter-${l}.html`,chap:l,ts:new Date(n.Date).valueOf()}})}function ca(a,t){let e=t.split(".").slice(-1)[0];e=e.length>=3&&e.length<=4?e:"png";try{const r=a.CurChapter.Chapter.slice(1,-1),n=a.CurChapter.Chapter[a.CurChapter.Chapter.length-1],l=n!=="0"?`${r}.${n}`:r,o=`https://${a.CurPathName}/manga/${a.IndexName}/${l}-`;return a.Pages.map(i=>{const c=(i+"").padStart(3,"0");return`${o}${c}.${e}`})}catch{return[]}}var pa=Object.defineProperty,da=Object.defineProperties,ga=Object.getOwnPropertyDescriptors,zt=Object.getOwnPropertySymbols,ha=Object.prototype.hasOwnProperty,fa=Object.prototype.propertyIsEnumerable,Wt=(a,t,e)=>t in a?pa(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,qt=(a,t)=>{for(var e in t||(t={}))ha.call(t,e)&&Wt(a,e,t[e]);if(zt)for(var e of zt(t))fa.call(t,e)&&Wt(a,e,t[e]);return a},kt=(a,t)=>da(a,ga(t));class Vt extends B{async getRawUpdateData(){const t="https://api.mangadex.org/",[e,r]=await Promise.all([N(t,"chapter"),N(t,"manga")]);if(!r||!e)return;const n={};r.data.forEach(({id:o,relationships:i})=>{var c;const s=i.find(({type:p})=>p==="cover_art"),u=(c=s?.attributes)==null?void 0:c.fileName;u&&(n[o]=`https://mangadex.org/covers/${o}/${u}`)});const l=e.data.map(({relationships:o,attributes:i,id:c})=>{const s=o.find(({type:d})=>d==="manga"),u=typeof i.volume=="string"?+i.volume:void 0,p=typeof i.chapter=="string"?+i.chapter:void 0;if(p)return{slug:s.id,name:Object.values(s.attributes.title)[0],img:n[s.id],chapters:[{slug:i.externalUrl||c,label:i.title||void 0,vol:u,chap:p,lang:i.translatedLanguage,ts:new Date(i.readableAt).valueOf()}]}}).filter(Boolean);return super.finalizeRawUpdateData({rawUpdates:l})}async getRawTitleData(){var t,e,r;const n="https://api.mangadex.org/manga/",[l,o]=await Promise.all([N(n,_),N(n,_,"feed")]);if(!l||!o)return;const i=(r=(e=(t=o.data)==null?void 0:t.map)==null?void 0:e.call(t,u=>{const{attributes:p,id:d}=u;if(typeof p!="object"||typeof d!="string"||!d)return;const{externalUrl:h,title:v,volume:w,chapter:f,translatedLanguage:O}=p;return{slug:h||d,label:v||void 0,vol:typeof w=="string"?+w:void 0,chap:typeof f=="string"?+f:void 0,lang:O||"en",ts:new Date(p.readableAt).valueOf()}}).filter(u=>u?.chap!=null))!=null?r:[],{data:c}=l;if(!c)return;const s=Gt({data:c,entryTags:this.tags});if(s)return kt(qt({},s),{chapters:A(i),hasMoreChapters:(o.total||0)>(o.limit||0)})}async getRawReaderData(){var t,e,r,n,l,o,i,c,s,u,p,d,h,v,w;const f="https://api.mangadex.org/",[O,m,b]=await Promise.all([N(f,"chapter",_),N(f,"at-home","server",_),N(f,"manga",_,"aggregate")]);if(!O||!m||!b)return;const R=O.data,{volume:$,chapter:S,externalUrl:P,translatedLanguage:y}=R.attributes||{},{baseUrl:x,chapter:{data:T,dataSaver:M,hash:za}}=m,se=(e=(t=R.relationships)==null?void 0:t.find)==null?void 0:e.call(t,U=>U.type==="manga");if(!se)return;const ue=Gt({data:se,entryTags:this.tags});if(!ue||typeof b.volumes!="object")return;const I=Object.values(b.volumes).map(({volume:U,chapters:Va})=>{const Ga=U==="none"||typeof U!="string"?void 0:+U;return Object.values(Va).map(({id:Fa,chapter:ct})=>typeof ct!="string"||ct==="none"?void 0:{vol:Ga,chap:+ct,slug:Fa})}).flat().filter(Boolean).reverse();if(typeof S!="string"||S==="none"){if(I.length)return;I.push({chap:0,slug:R.id})}A(I);const ut=I.findIndex(U=>U.slug===R.id),Q=(n=(r=R.relationships)==null?void 0:r.find)==null?void 0:n.call(r,U=>U.type==="scanlation_group"),Wa=x.endsWith("/")?x:x+"/",ce=!!((o=(l=localStorage.getItem("md"))==null?void 0:l.includes)!=null&&o.call(l,'"dataSaver":true')),qa=`${Wa}${ce?"data-saver":"data"}/`,ka=(u=(s=(c=(i=ce?M:T)!=null?i:[]).map)==null?void 0:s.call(c,U=>`${qa}${za}/${U}`))!=null?u:[];return{externalUrl:P,vol:typeof $=="string"?+$:void 0,inferVol:(p=I[ut])==null?void 0:p.inferVol,chap:+S||0,imgs:ka,lang:y,slug:R.id,prevSlug:(d=I[ut+1])==null?void 0:d.slug,nextSlug:(h=I[ut-1])==null?void 0:h.slug,basePath:"/chapter/",groupName:(v=Q?.attributes)==null?void 0:v.name,groupUrl:(w=Q?.attributes)==null?void 0:w.website,title:kt(qt({},ue),{chapters:I})}}resolveTitleSlug(t){var e;return(e=D(t))==null?void 0:e.split("/").filter(Boolean)[1]}}Vt.specId="mangadex";function Gt({data:a,entryTags:t}){var e,r,n,l,o;const{id:i,attributes:c,relationships:s}=a;if(!i||typeof i!="string"||typeof c!="object")return;const{title:u,availableTranslatedLanguages:p,altTitles:d,tags:h,contentRating:v}=c;if(typeof u!="object"||!Array.isArray(p))return;const w=Object.values(u)[0];if(!w||typeof w!="string")return;const f=va(),O=(r=(e=p?.map)==null?void 0:e.call(p,y=>typeof y=="string"?y:void 0).filter(Boolean))!=null?r:[],m=O.filter(y=>y&&(!f||f.includes(y))),b=(n=d?.map)==null?void 0:n.call(d,y=>{const[[x,T]=[]]=Object.entries(y);return{lang:x,name:T}}),R=(l=s?.find)==null?void 0:l.call(s,y=>y.type==="cover_art"),$=(o=R?.attributes)==null?void 0:o.fileName,S=$?`https://mangadex.org/covers/${i}/${$}`:void 0,P=(h||[]).map(y=>{var x,T;return(T=(x=y?.attributes)==null?void 0:x.name)==null?void 0:T.en}).concat(v).filter(Boolean);return{url:`${location.origin}/title/${i}`,slug:i,name:w,altNames:b,langs:m.length>0?m:O,img:S,tags:G(t,P),isWebtoon:h?.some(y=>y.attributes.name.en==="Long Strip")}}function va(){var a;const t=localStorage.getItem("md");if(t)try{const e=JSON.parse(t),r=(a=e?.userPreferences)==null?void 0:a.filteredLanguages;return r!=null&&r.length?r:void 0}catch{return}}var ma=(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))(ma||{}),ot=(a=>(a.id="id",a.name="name",a.slug="slug",a))(ot||{}),ya=(a=>(a[a.string=1]="string",a[a.number=2]="number",a[a.bool=3]="bool",a[a.selection=4]="selection",a))(ya||{}),wa=(a=>(a[a.pending=0]="pending",a[a.completed=1]="completed",a[a.offline=2]="offline",a[a.incompat=3]="incompat",a))(wa||{}),ba=(a=>(a[a.releases=1]="releases",a[a.img=2]="img",a))(ba||{});function Ft(a,t){const e=a[0]===t?a.substring(1):a;return e[e.length-1]===t?e.substring(0,e.length-1):e}var Oa=Object.defineProperty,Ra=Object.defineProperties,Sa=Object.getOwnPropertyDescriptors,Ht=Object.getOwnPropertySymbols,$a=Object.prototype.hasOwnProperty,Pa=Object.prototype.propertyIsEnumerable,Jt=(a,t,e)=>t in a?Oa(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,E=(a,t)=>{for(var e in t||(t={}))$a.call(t,e)&&Jt(a,e,t[e]);if(Ht)for(var e of Ht(t))Pa.call(t,e)&&Jt(a,e,t[e]);return a},k=(a,t)=>Ra(a,Sa(t));class Yt extends B{async getRawUpdateData(){const t=await super.getRawUpdateData();if(t)return k(E({},t),{siteMeta:Da(this.spec.update,this.siteMeta)})}async getRawTitleData(){var t;const e=await super.getRawTitleData();if(!e)return;const r=L(location.pathname);let n;if((t=e.chapters)!=null&&t.length){const l=this.spec.title.chapter,o=document.querySelector(l.sel),i=D(g(l.url,{root:o}));i&&(n=L(i))}return k(E({},e),{siteMeta:K(this.siteMeta,{titleBase:r,readerBase:n})})}async getRawReaderData(){const t=await super.getRawReaderData();if(t)return k(E({},t),{siteMeta:K(this.siteMeta,{titleBase:L(D(t.title.url)),readerBase:L(location.pathname),idBase:Zt()}),title:k(E({},t.title),{id:await this.getReaderTitleId()})})}async getRawSearchData(){const t=await super.getRawSearchData();if(!t)return;const e=this.spec.search.title,r=document.querySelector(e.sel),n=g(e.url,{root:r});return k(E({},t),{siteMeta:K(this.siteMeta,{titleBase:L(D(n)),idBase:Zt()})})}async getReaderTitleId(){const t=await this.getGlobalData([{attr:"HISTORY"},{attr:"getStored",args:[]}]);if(!t||typeof t!="object")return;const e=Object.values(t).filter(Boolean);if(e.length)return e.sort((r,n)=>n.time-r.time),e[0].manga_ID}}Yt.specId="mangastream";function Da(a,t){var e,r;if(!a)return;const n=k(E({},t),{updatePath:Ft(location.pathname,"/")}),l=a.title,o=(e=document.querySelector(l.sel))!=null?e:void 0;if(!o)return;const i=D(g(l.url,{root:o}));if(i===void 0)return;const c=(r=o.querySelector(l.chapter.sel))!=null?r:void 0;if(!c)return;const s=D(g(l.chapter.url,{root:c}));if(s!==void 0)return n.titleBase=L(i),n.readerBase=L(s),t.titleIdType===ot.id&&(g(l.id,{root:o})||(t.titleIdType=ot.name)),K(t,n)}function Zt(){return document.querySelector('link[rel="shortlink"][href*="/?p="]')?"?p=":void 0}function K(a,t){const e=Object.keys(t),r=E({},a);let n=!1;return e.forEach(l=>{const o=t[l];o!==a[l]&&(r[l]=o,n=!0)}),n?r:void 0}function L(a){return Ft(a,"/").split("/").slice(0,-1).join("/")}var ja=Object.defineProperty,xa=Object.defineProperties,Ta=Object.getOwnPropertyDescriptors,Kt=Object.getOwnPropertySymbols,Ca=Object.prototype.hasOwnProperty,Na=Object.prototype.propertyIsEnumerable,Qt=(a,t,e)=>t in a?ja(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,st=(a,t)=>{for(var e in t||(t={}))Ca.call(t,e)&&Qt(a,e,t[e]);if(Kt)for(var e of Kt(t))Na.call(t,e)&&Qt(a,e,t[e]);return a},Xt=(a,t)=>xa(a,Ta(t));class te extends B{async getRawReaderData(){const t=await super.getRawReaderData();if(!t)return t;let e=t.title.id;if(!e){const r=this.spec.reader.title;r.id&&await C(r.id.split("|")[0],{lazy:!0}),e=g(r.id)}return Xt(st({},t),{title:Xt(st({},t.title),{id:e,chapters:await Ma(e)})})}resolveTitleSlug(t){const e=super.resolveTitleSlug(t);if(!e)return;const r=e.lastIndexOf("-"),n=+e.substring(r+1);return r===-1||isNaN(n)||n<1e3?e:e.substring(0,r)}}te.specId="nettruyen";async function Ma(a){var t;if(!a)return[];const e=await fetch(`/Comic/Services/ComicService.asmx/ProcessChapterList?comicId=${a}`).then(r=>r.status===200?r.json():void 0).catch(()=>[]);return(t=e?.chapters)!=null&&t.length?A(e.chapters.map(r=>{const{name:n,url:l}=r,o=V(n);if(!(!o||!l))return st({slug:D(l).split("/").filter(Boolean).slice(2).join("/")},o)})):[]}const Ua=[Ct,_t,Et,Vt,Yt,te];function ee(a){var t;const e=(t=Ua.find(r=>r.specId===a.spec.id))!=null?t:Ee;return new e(a)}var Ba=Object.defineProperty,_a=Object.defineProperties,Ia=Object.getOwnPropertyDescriptors,ae=Object.getOwnPropertySymbols,Aa=Object.prototype.hasOwnProperty,Ea=Object.prototype.propertyIsEnumerable,re=(a,t,e)=>t in a?Ba(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,ne=(a,t)=>{for(var e in t||(t={}))Aa.call(t,e)&&re(a,e,t[e]);if(ae)for(var e of ae(t))Ea.call(t,e)&&re(a,e,t[e]);return a},le=(a,t)=>_a(a,Ia(t));async function La(a){var t,e;const{spec:r}=a;if(r){const n=(t=a.siteMeta)!=null?t:r.meta,l=a.type?[a.type]:ie(n,r.generic);if(!l.length)return;const o=ee(le(ne({},a),{spec:r,siteMeta:n}));return await W(l.map(i=>o.getRawPageByType(i)))}return await W(((e=a.genericSpecs)!=null?e:[]).map(n=>{const l=ie(n.meta,n.generic);if(!l.length)return[];const o=ee(le(ne({},a),{spec:n,siteMeta:n.meta}));return l.map(i=>o.getRawPageByType(i))}).flat())}function ie(a,t){if(location.pathname==="/")return[];const{titleBase:e,readerBase:r}=a,n=location.pathname.split("/").filter(Boolean),l=oe(n,r),o=oe(n,e);if(l!==o)return l>o?[j.reader]:[j.title];if(l>0)return[j.reader,j.title];if(n.length===1){const i=[!r&&j.reader,!e&&j.title].filter(Boolean);if(i.length)return i}return t?[j.reader,j.title]:[]}function oe(a,t){if(!t)return 0;const e=t.split("/").filter(Boolean);return a.length<=e.length?0:e.filter((r,n)=>a[n]===r||r==="{titleSlug}"||r==="{lang}").length}z.PageType=j,z.scrape=La});
package/init.js CHANGED
@@ -1 +1 @@
1
- (function(){"use strict";function L(n,e){let t;return()=>{t&&clearTimeout(t),t=setTimeout(()=>{n(),t=void 0},e)}}async function P({addListener:n,removeListener:e,transform:t,filter:i,handler:o,onTimeout:r,timeout:a,once:l}){return new Promise(u=>{n(w);const d=()=>l===!0&&e(w),c=a?setTimeout(()=>{d(),u(void 0),r?.()},a):void 0;async function w(s,...j){s=t?t(s):s,s!==void 0&&(!i||i(s,...j))&&(d(),u(s),o?.(s,...j),c&&clearTimeout(c))}})}var W=Object.defineProperty,f=Object.getOwnPropertySymbols,M=Object.prototype.hasOwnProperty,E=Object.prototype.propertyIsEnumerable,y=(n,e,t)=>e in n?W(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,I=(n,e)=>{for(var t in e||(e={}))M.call(e,t)&&y(n,t,e[t]);if(f)for(var t of f(e))E.call(e,t)&&y(n,t,e[t]);return n};async function h(n){const e=await P(I({addListener:t=>window.addEventListener("message",t),removeListener:t=>window.removeEventListener("message",t)},n));return e?.data}function T({event:n,filter:e,handler:t,senderWindow:i,targetOrigin:o}){h({filter:r=>{var a,l;return((a=r.data)==null?void 0:a.event)===n&&!!((l=r.data)!=null&&l.reqId)&&(!e||e(r))},handler:async r=>{const a=await t?.(r);(i||window).postMessage({resId:r.data.reqId,result:a},o??"*")}})}function k(){return Math.random().toString(16).slice(2)}async function p(n){var e;const{receiverWindow:t,timeout:i,targetOrigin:o,event:r,args:a}=n,l={reqId:k(),event:r,args:a};(e=t||window)==null||e.postMessage(l,o??"*");const u=await h({filter:d=>{var c;return((c=d?.data)==null?void 0:c.resId)===l.reqId},timeout:i??3e4,once:!0});return u?.result}async function v(n,e,t){const i=await t(()=>{n=0});if(i!==void 0)return i;if(!(n<=0))return await new Promise(o=>{setTimeout(async()=>{const r=await v(n-1,e,t);o(r)},e)})}async function x(n,e,t=0){var i;const o=(i=e.root)!=null?i:document.documentElement;return v(e.lazy===!0?200:0,100,()=>{var r;const a=e.all===!0?Array.from(o.querySelectorAll(n)):(r=o.querySelector(n))!=null?r:void 0;return(e.all?!(a!=null&&a.length):!a)?void 0:a})}var A=Object.defineProperty,g=Object.getOwnPropertySymbols,q=Object.prototype.hasOwnProperty,C=Object.prototype.propertyIsEnumerable,m=(n,e,t)=>e in n?A(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,b=(n,e)=>{for(var t in e||(e={}))q.call(e,t)&&m(n,t,e[t]);if(g)for(var t of g(e))C.call(e,t)&&m(n,t,e[t]);return n};const O=()=>{var n;return window.top&&window.top!=window&&((n=location.ancestorOrigins[0])==null?void 0:n.startsWith("chrome-extension://"))},S={delay:{loading:!0}};R();function R(){O()||(B(()=>{var o,r;p({event:"tk:spaNavigation",args:{}}),(r=(o=window.flutter_inappwebview)==null?void 0:o.callHandler)==null||r.call(o,"tk:spaNavigation",{})}),D(o=>{var r,a;p({event:"tk:titleChanged",args:{title:o}}),(a=(r=window.flutter_inappwebview)==null?void 0:r.callHandler)==null||a.call(r,"tk:titleChanged",o)}));let n=location.pathname,e=b({},S);const t=F();async function i(o,r){const a=r.headers.get("Content-Type");if(!(a!=null&&a.includes("application/json"))){delete e[o];return}e[o]={res:r.clone()}}window.fetch=new Proxy(window.fetch,{apply:async(o,r,a)=>{var l,u;n!==location.pathname&&(n=location.pathname,e=b({},S));const[d,c]=a;if(c!=null&&c.method&&((u=(l=c.method).toLowerCase)==null?void 0:u.call(l))!=="get")return await o.apply(r,a);const w=H(d,await t);return e[w]={loading:!0},delete e.delay,await o.apply(r,[w,c]).then(s=>(i(w,s),s)).catch(s=>{throw delete e[w],s})}}),T({event:"tk:fetchResult",async handler(o){if(o.origin!==location.origin)return;const{baseUrl:r,segments:a}=o.data.args||{};return!Array.isArray(a)||typeof r!="string"?void 0:await _(()=>e,r,a.filter(l=>typeof l=="string"||typeof l?.isAny=="boolean"))}})}function U(n,e,t){const i=Object.keys(n).find(o=>N(o,e,t));return i?n[i]:void 0}function N(n,e,t){const i=n.replace(location.origin,""),o=e.replace(location.origin,"");if(!i.startsWith(o))return!1;const r=i.replace(o,"").split("?")[0].split("#")[0].split("/").filter(Boolean);return r.length===t.length&&t.every((a,l)=>a?.isAny||a===r[l])}function _(n,e,t){let i=15;return v(150,100,async o=>{const r=U(n(),e,t);if(!r){const a=Object.values(n());!(!a.length||a.some(l=>l.loading))&&!--i&&o();return}return await z(r)})}async function z(n){const{res:e,parsed:t,loading:i}=n;if(!i)return n.parsed=t??await e?.json().catch(async()=>JSON.parse(await e.text())).catch(()=>{}),delete n.res,n.parsed}async function F(){if(window._fetchOverrides)return window._fetchOverrides;if(O())return await p({event:"getFetchOverrides",args:{},timeout:3e3,receiverWindow:window.top})}function H(n,e){if(!(e!=null&&e.length))return n;const t=new URL(n.endsWith("/")?n.slice(0,-1):n),i=t.host+t.pathname,o=e.find(a=>new RegExp(a.match).test(i));if(!o)return n;const r=new URLSearchParams(t.search);return o.params.forEach(({key:a,value:l})=>{l?a.endsWith("[]")?r.append(a,l):r.set(a,l):r.delete(a)}),t.search=r.toString(),t.href}function B(n){let e=location.pathname;const t=L(()=>{e!==location.pathname&&(e=location.pathname,n())},50),i=(o,r,a)=>(t(),o.apply(r,a));window.addEventListener("popstate",t),window.history.pushState=new Proxy(window.history.pushState,{apply:i}),window.history.replaceState=new Proxy(window.history.replaceState,{apply:i})}async function D(n){const e=await x("title",{lazy:!0,all:!1});if(!e)return;let t=document.title;new MutationObserver(()=>{const i=document.title;i&&t!==i&&(t=i,n(i))}).observe(e,{childList:!0})}})();
1
+ (function(){"use strict";function S(n,e){let t;return()=>{t&&clearTimeout(t),t=setTimeout(()=>{n(),t=void 0},e)}}async function W({addListener:n,removeListener:e,transform:t,filter:i,handler:a,onTimeout:r,timeout:o,once:l}){return new Promise(d=>{n(w);const u=()=>l===!0&&e(w),c=o?setTimeout(()=>{u(),d(void 0),r?.()},o):void 0;async function w(s,...P){s=t?t(s):s,s!==void 0&&(!i||i(s,...P))&&(u(),d(s),a?.(s,...P),c&&clearTimeout(c))}})}var L=Object.defineProperty,v=Object.getOwnPropertySymbols,I=Object.prototype.hasOwnProperty,M=Object.prototype.propertyIsEnumerable,f=(n,e,t)=>e in n?L(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,T=(n,e)=>{for(var t in e||(e={}))I.call(e,t)&&f(n,t,e[t]);if(v)for(var t of v(e))M.call(e,t)&&f(n,t,e[t]);return n};async function y(n){const e=await W(T({addListener:t=>window.addEventListener("message",t),removeListener:t=>window.removeEventListener("message",t)},n));return e?.data}function k({event:n,filter:e,handler:t,senderWindow:i,targetOrigin:a}){y({filter:r=>{var o,l;return((o=r.data)==null?void 0:o.event)===n&&!!((l=r.data)!=null&&l.reqId)&&(!e||e(r))},handler:async r=>{const o=await t?.(r);(i||window).postMessage({resId:r.data.reqId,result:o},a??"*")}})}function x(){return Math.random().toString(16).slice(2)}async function p(n){var e;const{receiverWindow:t,timeout:i,targetOrigin:a,event:r,args:o}=n,l={reqId:x(),event:r,args:o};(e=t||window)==null||e.postMessage(l,a??"*");const d=await y({filter:u=>{var c;return((c=u?.data)==null?void 0:c.resId)===l.reqId},timeout:i??3e4,once:!0});return d?.result}async function h(n,e,t){const i=await t(()=>{n=0});if(i!==void 0)return i;if(!(n<=0))return await new Promise(a=>{setTimeout(async()=>{const r=await h(n-1,e,t);a(r)},e)})}var E=Object.defineProperty,g=Object.getOwnPropertySymbols,A=Object.prototype.hasOwnProperty,C=Object.prototype.propertyIsEnumerable,m=(n,e,t)=>e in n?E(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,b=(n,e)=>{for(var t in e||(e={}))A.call(e,t)&&m(n,t,e[t]);if(g)for(var t of g(e))C.call(e,t)&&m(n,t,e[t]);return n};const O=()=>{var n;return window.top&&window.top!=window&&((n=location.ancestorOrigins[0])==null?void 0:n.startsWith("chrome-extension://"))},j={delay:{loading:!0}};R();function R(){O()||(B(()=>{var a,r;p({event:"tk:spaNavigation",args:{}}),(r=(a=window.flutter_inappwebview)==null?void 0:a.callHandler)==null||r.call(a,"tk:spaNavigation",{})}),D(a=>{var r,o;p({event:"tk:titleChanged",args:{title:a}}),(o=(r=window.flutter_inappwebview)==null?void 0:r.callHandler)==null||o.call(r,"tk:titleChanged",a)}));let n=location.pathname,e=b({},j);const t=F();async function i(a,r){const o=r.headers.get("Content-Type");if(!(o!=null&&o.includes("application/json"))){delete e[a];return}e[a]={res:r.clone()}}window.fetch=new Proxy(window.fetch,{apply:async(a,r,o)=>{var l,d;n!==location.pathname&&(n=location.pathname,e=b({},j));const[u,c]=o;if(c!=null&&c.method&&((d=(l=c.method).toLowerCase)==null?void 0:d.call(l))!=="get")return await a.apply(r,o);const w=H(u,await t);return e[w]={loading:!0},delete e.delay,await a.apply(r,[w,c]).then(s=>(i(w,s),s)).catch(s=>{throw delete e[w],s})}}),k({event:"tk:fetchResult",async handler(a){if(a.origin!==location.origin)return;const{baseUrl:r,segments:o}=a.data.args||{};return!Array.isArray(o)||typeof r!="string"?void 0:await N(()=>e,r,o.filter(l=>typeof l=="string"||typeof l?.isAny=="boolean"))}})}function U(n,e,t){const i=Object.keys(n).find(a=>q(a,e,t));return i?n[i]:void 0}function q(n,e,t){const i=n.replace(location.origin,""),a=e.replace(location.origin,"");if(!i.startsWith(a))return!1;const r=i.replace(a,"").split("?")[0].split("#")[0].split("/").filter(Boolean);return r.length===t.length&&t.every((o,l)=>o?.isAny||o===r[l])}function N(n,e,t){let i=15;return h(150,100,async a=>{const r=U(n(),e,t);if(!r){const o=Object.values(n());!(!o.length||o.some(l=>l.loading))&&!--i&&a();return}return await _(r)})}async function _(n){const{res:e,parsed:t,loading:i}=n;if(!i)return n.parsed=t??await e?.json().catch(async()=>JSON.parse(await e.text())).catch(()=>{}),delete n.res,n.parsed}async function F(){if(window._fetchOverrides)return window._fetchOverrides;if(O())return await p({event:"getFetchOverrides",args:{},timeout:3e3,receiverWindow:window.top})}function H(n,e){if(!(e!=null&&e.length))return n;const t=new URL(n.endsWith("/")?n.slice(0,-1):n),i=t.host+t.pathname,a=e.find(o=>new RegExp(o.match).test(i));if(!a)return n;const r=new URLSearchParams(t.search);return a.params.forEach(({key:o,value:l})=>{l?o.endsWith("[]")?r.append(o,l):r.set(o,l):r.delete(o)}),t.search=r.toString(),t.href}function B(n){let e=location.pathname;const t=S(()=>{e!==location.pathname&&(e=location.pathname,n())},50),i=(a,r,o)=>(t(),a.apply(r,o));window.addEventListener("popstate",t),window.history.pushState=new Proxy(window.history.pushState,{apply:i}),window.history.replaceState=new Proxy(window.history.replaceState,{apply:i})}async function D(n){let e=document.title;setInterval(()=>{const t=document.title;t&&e!==t&&(e=t,n(t))},500)}})();
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "trackkun-dom",
3
3
  "author": "endyquang",
4
- "version": "0.1.0",
4
+ "version": "0.1.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","id":"mangastream","generic":true,"name":"meta[itemprop=\"name\"]|attr:content","meta":{"updatePath":"","titleBase":"series","readerBase":"","searchBase":"?s=","idBase":"?p=","titleIdType":"id","defaultLang":"en"},"update":{"title":{"sel":".listupd .utao .uta, .bixbox .bs.styletere","id":"a.series[rel]|attr:rel","name":"h4, .info .tt, .tt a|text","url":"a|attr:href","img":".imgu img, .limit img|attr-contain:src","chapter":{"sel":".luf ul li, .chapter-list > a, .chfiv > li","label":"a, .epxs|text","url":"a|attr:href || |attr:href","at":"a + span, .expdate, .newchtimeluffy|text"}}},"title":{"sel":"#chapterlist > ul","id":".bookmark[data-id]|attr:data-id","name":"h1.entry-title|text","img":".thumb img|attr-contain:src","type":".imptdt a[href*=\"type=\"]|text || .imptdt:first-of-type i|text","tags":".postbody .mgen > a|text","chapter":{"sel":"#chapterlist > ul > li","url":"a|attr:href","label":".chapternum|text","at":".chapterdate|text"}},"reader":{"sel":"#readerarea","id":".ctop option:selected|attr:data-id","label":"h1.entry-title|text","img":"#readerarea > p > img,#readerarea > img|attr-contain:src","title":{"sel":".headpost .allc","name":"a|text","url":"a|attr:href"},"prev":"a.ch-prev-btn:not(.disabled)|attr:href","next":"a.ch-next-btn:not(.disabled)|attr:href","chapter":{"sel":".ctop option:not([disabled]):not([value=\"\"])","id":"|attr:data-id","label":"|text","url":"|attr:value"}},"search":{"title":{"sel":".listupd .bsx","name":".bigor .tt|text","url":"a|attr:href","img":".limit img|attr-contain:src"}}},{"404":".error-404.not-found","id":"madara","generic":true,"name":"a.logo|attr:title || meta[property=\"og:site_name\"]|attr:content","meta":{"updatePath":"","titleBase":"manga","readerBase":"manga/{titleSlug}","idBase":"?p=","searchBase":"?post_type=wp-manga&s=","defaultLang":"en","titleIdType":"id"},"update":{"title":{"sel":".page-listing-item .page-item-detail","id":"[data-post-id]|attr:data-post-id","name":"h3 a|text","url":"a|attr:href","img":"img|attr-contain:src","chapter":{"sel":".chapter-item","label":".chapter a|text","url":".chapter a|attr:href","at":".c-new-tag|attr:title || .post-on|text"}}},"title":{"lazy":true,"sel":".listing-chapters_wrap, #manga-chapters-holder","id":"#manga-chapters-holder|attr:data-id || .rating-post-id|attr:value","name":"h1|text","img":".summary_image .img-responsive|[attr:data-src,attr-contain:src]","tags":"a[rel=\"tag\"][href*=\"genre\"],a[rel=\"tag\"][href*=\"tag\"]|text","type":".post-content_item .summary-heading|row:type","chapter":{"sel":"li.wp-manga-chapter","url":"a|attr:href","label":"a|text","at":".c-new-tag|attr:title || .chapter-release-date i|text"}},"reader":{"sel":".entry-content .read-container","label":".breadcrumb li.active|text","img":".reading-content img|[attr:data-src,attr-contain:src]","title":{"sel":".breadcrumb li:nth-last-child(2) a","id":"#manga-reading-nav-head|attr:data-id","name":"|text","url":"|attr:href"},"prev":"a.btn.prev_page|attr:href","next":"a.btn.next_page|attr:href","chapter":{"sel":"#manga-reading-nav-head select.single-chapter-select > option:not([disabled])","label":"|text","url":"|attr:data-redirect"}},"search":{"title":{"sel":".c-tabs-item__content","name":"h3 a|text","url":"a|attr:href","img":".tab-thumb img|attr-contain:src","chapter":{"sel":".tab-meta","label":".chapter a|text","url":".chapter a|attr:href","at":".c-new-tag|attr:title || .post-on|text"}}}},{"404":".elapi > a[href*=\"/search?q=\"]","id":"mangahub","name":".navbar-brand img.logo|attr:alt","meta":{"updatePath":"","titleBase":"manga","readerBase":"chapter/{titleSlug}","searchBase":"search?q=","defaultLang":"en","titleIdType":"slug"},"update":{"title":{"sel":".list-group-item .media","name":"h4.media-heading a|text","img":".media-left img|attr-contain:src","url":".media-heading a|attr:href","at":".media-heading .small|text","chapter":{"sel":".media-body > a","label":"|text","url":"|attr:href"}}},"title":{"sel":"#chapters-tab .tab-content","name":"#mangadetail h1|text","img":"#mangadetail img.manga-thumb|attr-contain:src","tags":"#mangadetail a.genre-label|text","chapter":{"sel":"#chapters-tab li.list-group-item","label":"a > span:first-child > span:first-child|text","url":"a|attr:href","at":"small|text"}},"reader":{"sel":"#mangareader","label":"h3|text","img":"#mangareader div img[alt]|attr-contain:src","prev":".chapter-pager .previous a[href*=\"/chapter/\"]|attr:href","next":".chapter-pager .next a[href*=\"/chapter/\"]|attr:href","title":{"sel":"h3 a","name":"|text","url":"|attr:href"},"chapter":{"sel":".pager-dropdown .dropdown-menu > li > a","label":"|text","url":"|attr:href"}},"search":{"title":{"sel":".media-manga","name":"h4 a|text","img":".media-left img|attr-contain:src","url":"h4 a|attr:href","chapter":{"sel":".media-body","label":"a[href*=\"/chapter/\"]|text","url":"a[href*=\"/chapter/\"]|attr:href"}}}},{"404":"#content > .wrapper > .notf img","id":"manhwafreak","name":"meta[itemprop=\"name\"],meta[property=\"og:site_name\"]|attr:content","meta":{"updatePath":"","titleBase":"manga","readerBase":"","searchBase":"?s=","idBase":"?p=","defaultLang":"en","titleIdType":"name"},"update":{"title":{"sel":".lastest .lastest-serie","name":".lastest-title a|text","img":".img img|attr-contain:src","url":"a|attr:href","chapter":{"sel":".lastest-chap > a","label":"li|text","url":"|attr:href","at":"li span|text"}}},"title":{"sel":".series + .chapters .chapter-li","name":".series h1.title|text","img":".series .info img|attr-contain:src","tags":"#info > .left > div > p:first-child|row:genre(s)","type":"#info > .left > div > p:first-child|row:type","chapter":{"sel":".chapter-li > a","label":".chapter-info p|text","url":"|attr:href","at":".chapter-info p:nth-child(2)|text"}},"reader":{"sel":"#readerarea","label":"h2.entry-title|text","img":"#readerarea img.ts-main-image[data-index]|[attr:data-src,attr-contain:src]","prev":"a.ch-prev-btn:not(.disabled)|attr:href","next":"a.ch-next-btn:not(.disabled)|attr:href","title":{"sel":".breadcrumb > ul > li:nth-child(3) a","name":"span|text","url":"|attr:href"},"chapter":{"sel":".ctop select#chapter option:not([disabled]):not([value=\"\"])","label":"|text","url":"|attr:value"}},"search":{"title":{"sel":".listupd .lastest-serie","name":".lastest-title|text","url":"a|attr:href","img":"img.ts-post-image|attr-contain:src","chapter":{"sel":".lastest-chap > a","label":"li|text","url":"|attr:href","at":"li span|text"}}}},{"404":".error-404.not-found","id":"nettruyen","name":"meta[property=\"og:site_name\"]|attr:content","meta":{"updatePath":"","titleBase":"truyen-tranh","readerBase":"truyen-tranh/{titleSlug}","searchBase":"tim-truyen?keyword=","defaultLang":"vi","titleIdType":"id"},"update":{"title":{"sel":".items > .row > .item","id":".comic-item|attr:data-id","name":"h3 a|text","img":".image img|attr-contain:src","url":"h3 a|attr:href","chapter":{"sel":".chapter","label":"a|text","url":"a|attr:href","at":".time|text"}}},"title":{"sel":"#nt_listchapter nav > ul","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":{"sel":".reading .reading-detail","label":"a.itemcrumb.active > span[itemprop=\"name\"]|text","img":".reading-detail > .page-chapter > img,.reading-detail > img|[attr:data-original,attr-contain:src]","prev":"a.prev.a_prev:not(.disabled)|attr:href","next":"a.next.a_next:not(.disabled)|attr:href","title":{"sel":"h1.txt-primary a","id":".follow-link[data-id]|attr:data-id","name":"|text","url":"|attr:href"}},"search":{"title":{"sel":".items > .row > .item","name":"h3 a|text","img":".image img|attr-contain:src","url":"h3 a|attr:href"}}},{"id":"manga4life","name":"#Nav .LogoBox a|attr:title","meta":{"updatePath":"","titleBase":"manga","readerBase":"read-online","readerSlugTransformer":1,"searchBase":"search/?name=","defaultLang":"en","titleIdType":"slug"},"update":{"title":{"sel":".BoxBody.LatestChapters .Chapter","name":".Image > a|attr:title","img":".Image > a img|attr-contain:src","url":".Image > a|attr:href","chapter":{"sel":".Label > a","label":".ChapterLabel|text","url":"|attr:href","at":".DateLabel|text"}}},"title":{"sel":".BoxBody div.list-group[ng-if^=\"vm.Chapters\"]","name":".BoxBody h1|text","img":".BoxBody img.img-fluid|attr-contain:src","tags":"a[href*=\"search/?genre=\"]|text","type":"a[href*=\"search/?type=\"]|text","chapter":{"sel":".BoxBody div.list-group[ng-if^=\"vm.Chapters\"] > a.ChapterLink","label":"span:first-child|text","url":"|attr:href","at":"span:last-child|text"}},"reader":{"sel":"#TopPage.ImageGallery","label":"button[data-target=\"#ChapterModal\"]|text","img":".ImageGallery img.img-fluid|attr:ng-src","title":{"sel":".DesktopNav a","name":"|text","url":"|attr:href"}},"search":{"title":{"sel":".SearchFilterNav + .row > div[ng-repeat^=\"Series\"]","name":"div:nth-child(2) a.SeriesName|text","img":"img|attr-contain:src","url":"a|attr:href"}}},{"id":"mangadex","name":"meta[property='og:site_name']|attr:content","meta":{"updatePath":"titles/latest","titleBase":"title","titleSlugTransformer":1,"readerBase":"chapter","searchBase":"titles?q=","defaultLang":"en","multiLang":true,"titleIdType":"slug"},"fetchOverrides":[{"type":"updates","match":"^api\\.mangadex\\.org\\/(chapter|manga)$","params":[{"key":"limit","value":"96"},{"key":"contentRating[]","value":"pornographic"}]},{"type":"chapters","match":"^api\\.mangadex\\.org\\/manga\\/.+\\/feed$","params":[{"id":"limit","key":"limit","value":"500"},{"id":"lang","key":"translatedLanguage[]"}]}]},{"id":"comick","name":"meta[property=\"og:site_name\"],meta[name=\"application-name\"]|attr:content","meta":{"home":"home","updatePath":"home","titleBase":"comic","readerBase":"comic/{titleSlug}","searchBase":"search?q=","defaultLang":"en","multiLang":true,"titleIdType":"id"},"fetchOverrides":[{"type":"updates","match":"^api\\.comick\\.app\\/chapter$","params":[{"key":"order","value":"new"},{"key":"accept_erotic_content","value":"true"}]},{"type":"chapters","match":"^api\\.comick\\.app\\/comic\\/.+\\/chapters$","params":[{"id":"limit","key":"limit","value":"1000"},{"id":"lang","key":"lang"}]}],"update":{"title":{"sel":"#updates-container div[title]","name":"|attr:title","img":"img|attr-contain:src","url":"a[href^=\"/comic/\"]|attr:href","chapter":{"sel":"a:last-child","label":"div:first-child|text","url":"|attr:href","at":"div:nth-child(2)|text"}}},"title":{"sel":"#chapter-header ~ div table > tbody","name":"h1|text","img":"a[href$=\"/covers\"] > img|attr-contain:src","langs":"#chapter-header + div select option:not([value=\"\"]):not([value=\"all\"])|attr:value","tags":"table a.link[href^=\"/search?genres=\"]|text","type":"h1 ~ div.text-sm span:first-child|row:origination"},"reader":{"lazy":true,"sel":".images-reader-container","label":"select:first-of-type option[selected]|text","img":".images-reader-container img|attr-contain:src","title":{"sel":"div > a[href*=\"/comic/\"]","name":"|text || img[alt]|attr:alt","url":"|attr:href","img":"img|attr-contain:src"},"lang":"select:nth-child(2)|value","prev":".images-reader-container a:first-child[href^=\"/comic/\"]:not(:last-child)|attr:href","next":".images-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","name":".brand img[alt]|attr:alt","meta":{"updatePath":"","titleBase":"series","titleSlugTransformer":1,"readerBase":"chapter","searchBase":"search?word=","defaultLang":"en","titleIdType":"slug"},"update":{"title":{"sel":"#series-list > .item","name":"a.item-title|text","img":".item-cover img|attr-contain:src","url":"a.item-title|attr:href","lang":"em[data-lang]|attr:data-lang","chapter":{"sel":".item-volch","label":"a|text","url":"a|attr:href","at":"i|text"}}},"title":{"sel":".detail-set ~ .episode-list","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":{"sel":"#viewer","label":"title|text","img":"img.page-img|attr-contain:src","title":{"sel":"h3.nav-title a","name":"|text","url":"|attr:href"},"lang":"h3.nav-title em[data-lang]|attr:data-lang","prev":".nav-prev > a[href^=\"/chapter/\"]|attr:href","next":".nav-next > a[href^=\"/chapter/\"]|attr:href","chapter":{"sel":".nav-epis > select option:not([disabled]):not([value=\"\"])","label":"|text","url":"|attr:value"}}},{"404":"#error > .attention","id":"mangago","name":"#logo_div|attr:title || meta[property=\"og:site_name\"]|attr:content","meta":{"updatePath":"list/latest","titleBase":"read-manga","readerBase":"read-manga/{titleSlug}","searchBase":"r/l_search/?name=","defaultLang":"en","titleIdType":"slug"},"update":{"title":{"sel":"#search_list > li .box","name":"a.thm-effect|attr:title","img":"a.thm-effect img|attr-contain:src","url":"a.thm-effect|attr:href","chapter":{"sel":"a.chico","label":"|text","url":"|attr:href"}}},"title":{"sel":"#chapter_table","name":".w-title h1|text","img":".article .cover img|attr-contain:src","tags":".manga_right a[href*=\"/genre/\"]|text","chapter":{"sel":"#chapter_table tbody tr","label":"h4 a b|text","url":"h4 a|attr:href","at":"td:last-child|text"}},"reader":{"sel":"#pic_container","label":"#navi h3 span:last-child|text","img":"#pic_container img[id^=\"page\"]|attr-contain:src","title":{"sel":"#navi a#series","name":"|text","url":"|attr:href"},"chapter":{"sel":"ul.dropdown-menu.chapter > li > a","label":"|text","url":"|attr:value"}},"search":{"title":{"sel":"#search_list > li .box","name":"a.thm-effect|attr:title","img":"a.thm-effect img|attr-contain:src","url":"a.thm-effect|attr:href","chapter":{"sel":"a.chico","label":"|text","url":"|attr:href"}}}},{"404":".nf-large + .nf-desc + a[href=\"/home\"]","id":"kakalot","name":"meta[property=\"og:site_name\"]|attr:content","meta":{"home":"home","updatePath":"home","titleBase":"","readerBase":"read/{titleSlug}/{lang}","searchBase":"search?keyword=","defaultLang":"en","multiLang":true,"titleIdType":"id"},"update":{"title":{"sel":"#latest-chap .inner > .item","id":".item-info h3|attr:data-id","name":".item-info h3 a|text","img":".item-poster img|attr-contain:src","url":"a|attr:href","chapter":{"sel":".chapter-list > .cl-item","label":"a.chapter-name|text","url":"a|attr:href","at":".time|text"}}},"title":{"lazy":true,"sel":"#chapt-list .cl-header","id":"#main|attr:data-id","name":".detail-box h3.manga-name|text","img":".detail-box .manga-poster-img|attr-contain:src","tags":".detail-box .line-content a[href*=\"/genre/\"]|text","langs":"#chap-lang .lang-item|attr:data-code","chapter":{"sel":"#chapt-list .reading-list > .item","label":"a.chapter-name|text","url":"a.chapter-name|attr:href","at":".item-time|text"}},"reader":{"sel":"#reading","label":".breadcrumb-item.active|text","img":"#list-image .card-wrap[data-url]|attr:data-url","title":{"sel":".breadcrumb-item:nth-child(2) a","id":"#reading|attr:data-manga-id","name":"|text","url":"|attr:href"},"chapter":{"sel":".kbreadcrumb + .reading-option option.reading-item","label":"|text","url":"|attr:value"}},"search":{"title":{"sel":".manga-list > .inner > .item","name":".manga-name a|attr:title","img":".manga-poster img|attr-contain:src","url":".manga-name a|attr:href","chapter":{"sel":".latest-chapter .chapter-name","label":"|text","url":"|attr:href"}}}},{"id":"reaper","name":"nav a img[alt]|attr:alt","meta":{"updatePath":"latest/comics","titleBase":"comics","readerBase":"comics/{titleSlug}/chapters","searchBase":"?s=","defaultLang":"en","titleIdType":"name"},"update":{"title":{"sel":"main h2 + div .grid.grid-cols-1 > div","img":"a img|attr-contain:src","name":"p a|text","url":"a|attr:href","chapter":{"sel":"p + div > a","label":"|text","url":"|attr:href","at":"p|text"}}},"title":{"sel":"div > ul[role=\"list\"]:first-child","name":"h1|text","img":"main .container img[alt]","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":{"sel":"","label":"title|text","img":"main nav ~ img.max-w-full|attr-contain:src","prev":"main nav:first-of-type > div:first-child a|attr:href","next":"main nav:first-of-type > div:last-child a:last-child:not(:first-child)|attr:href","title":{"sel":"body","name":"main p|text","url":"main nav:first-of-type > div:last-child a:first-child|attr:href"}}}]
1
+ [{"404":"#content > .wrapper > .notf img","id":"mangastream","generic":true,"name":"meta[itemprop=\"name\"]|attr:content","meta":{"updatePath":"","titleBase":"series","readerBase":"","searchBase":"?s=","idBase":"?p=","titleIdType":"id","defaultLang":"en"},"update":{"title":{"sel":".listupd .utao .uta, .bixbox .bs.styletere","id":"a.series[rel]|attr:rel","name":"h4, .info .tt, .tt a|text","url":"a|attr:href","img":".imgu img, .limit img|attr-contain:src","chapter":{"sel":".luf ul li, .chapter-list > a, .chfiv > li","label":"a, .epxs|text","url":"a|attr:href || |attr:href","at":"a + span, .expdate, .newchtimeluffy|text"}}},"title":{"sel":"#chapterlist > ul","id":".bookmark[data-id]|attr:data-id","name":"h1.entry-title|text","img":".thumb img|attr-contain:src","type":".imptdt a[href*=\"type=\"]|text || .imptdt:first-of-type i|text","tags":".postbody .mgen > a|text","chapter":{"sel":"#chapterlist > ul > li","url":"a|attr:href","label":".chapternum|text","at":".chapterdate|text"}},"reader":{"sel":"#readerarea","id":".ctop option:selected|attr:data-id","label":"h1.entry-title|text","img":"#readerarea > p > img,#readerarea > img|attr-contain:src","title":{"sel":".headpost .allc","name":"a|text","url":"a|attr:href"},"prev":"a.ch-prev-btn:not(.disabled)|attr:href","next":"a.ch-next-btn:not(.disabled)|attr:href","chapter":{"sel":".ctop option:not([disabled]):not([value=\"\"])","id":"|attr:data-id","label":"|text","url":"|attr:value"}},"search":{"title":{"sel":".listupd .bsx","name":".bigor .tt|text","url":"a|attr:href","img":".limit img|attr-contain:src"}}},{"404":".error-404.not-found","id":"madara","generic":true,"name":"a.logo|attr:title || meta[property=\"og:site_name\"]|attr:content","meta":{"updatePath":"","titleBase":"manga","readerBase":"manga/{titleSlug}","idBase":"?p=","searchBase":"?post_type=wp-manga&s=","defaultLang":"en","titleIdType":"id"},"update":{"title":{"sel":".page-listing-item .page-item-detail","id":"[data-post-id]|attr:data-post-id","name":"h3 a|text","url":"a|attr:href","img":"img|attr-contain:src","chapter":{"sel":".chapter-item","label":".chapter a|text","url":".chapter a|attr:href","at":".c-new-tag|attr:title || .post-on|text"}}},"title":{"lazy":true,"sel":".listing-chapters_wrap, #manga-chapters-holder","id":"#manga-chapters-holder|attr:data-id || .rating-post-id|attr:value","name":"h1|text","img":".summary_image .img-responsive|[attr:data-src,attr-contain:src]","tags":"a[rel=\"tag\"][href*=\"genre\"],a[rel=\"tag\"][href*=\"tag\"]|text","type":".post-content_item .summary-heading|row:type","chapter":{"sel":"li.wp-manga-chapter","url":"a|attr:href","label":"a|text","at":".c-new-tag|attr:title || .chapter-release-date i|text"}},"reader":{"sel":".entry-content .read-container","label":".breadcrumb li.active|text","img":".reading-content img|[attr:data-src,attr-contain:src]","title":{"sel":".breadcrumb li:nth-last-child(2) a","id":"#manga-reading-nav-head|attr:data-id","name":"|text","url":"|attr:href"},"prev":"a.btn.prev_page|attr:href","next":"a.btn.next_page|attr:href","chapter":{"sel":"#manga-reading-nav-head select.single-chapter-select > option:not([disabled])","label":"|text","url":"|attr:data-redirect"}},"search":{"title":{"sel":".c-tabs-item__content","name":"h3 a|text","url":"a|attr:href","img":".tab-thumb img|attr-contain:src","chapter":{"sel":".tab-meta","label":".chapter a|text","url":".chapter a|attr:href","at":".c-new-tag|attr:title || .post-on|text"}}}},{"404":".elapi > a[href*=\"/search?q=\"]","id":"mangahub","name":".navbar-brand img.logo|attr:alt","meta":{"updatePath":"","titleBase":"manga","readerBase":"chapter/{titleSlug}","searchBase":"search?q=","defaultLang":"en","titleIdType":"slug"},"update":{"title":{"sel":".list-group-item .media","name":"h4.media-heading a|text","img":".media-left img|attr-contain:src","url":".media-heading a|attr:href","at":".media-heading .small|text","chapter":{"sel":".media-body > a","label":"|text","url":"|attr:href"}}},"title":{"sel":"#chapters-tab .tab-content","name":"#mangadetail h1|text","img":"#mangadetail img.manga-thumb|attr-contain:src","tags":"#mangadetail a.genre-label|text","chapter":{"sel":"#chapters-tab li.list-group-item","label":"a > span:first-child > span:first-child|text","url":"a|attr:href","at":"small|text"}},"reader":{"sel":"#mangareader","label":"h3|text","img":"#mangareader div img[alt]|attr-contain:src","prev":".chapter-pager .previous a[href*=\"/chapter/\"]|attr:href","next":".chapter-pager .next a[href*=\"/chapter/\"]|attr:href","title":{"sel":"h3 a","name":"|text","url":"|attr:href"},"chapter":{"sel":".pager-dropdown .dropdown-menu > li > a","label":"|text","url":"|attr:href"}},"search":{"title":{"sel":".media-manga","name":"h4 a|text","img":".media-left img|attr-contain:src","url":"h4 a|attr:href","chapter":{"sel":".media-body","label":"a[href*=\"/chapter/\"]|text","url":"a[href*=\"/chapter/\"]|attr:href"}}}},{"404":"#content > .wrapper > .notf img","id":"manhwafreak","name":"meta[itemprop=\"name\"],meta[property=\"og:site_name\"]|attr:content","meta":{"updatePath":"","titleBase":"manga","readerBase":"","searchBase":"?s=","idBase":"?p=","defaultLang":"en","titleIdType":"name"},"update":{"title":{"sel":".lastest .lastest-serie","name":".lastest-title a|text","img":".img img|attr-contain:src","url":"a|attr:href","chapter":{"sel":".lastest-chap > a","label":"li|text","url":"|attr:href","at":"li span|text"}}},"title":{"sel":".series + .chapters .chapter-li","name":".series h1.title|text","img":".series .info img|attr-contain:src","tags":"#info > .left > div > p:first-child|row:genre(s)","type":"#info > .left > div > p:first-child|row:type","chapter":{"sel":".chapter-li > a","label":".chapter-info p|text","url":"|attr:href","at":".chapter-info p:nth-child(2)|text"}},"reader":{"sel":"#readerarea","label":"h2.entry-title|text","img":"#readerarea img.ts-main-image[data-index]|[attr:data-src,attr-contain:src]","prev":"a.ch-prev-btn:not(.disabled)|attr:href","next":"a.ch-next-btn:not(.disabled)|attr:href","title":{"sel":".breadcrumb > ul > li:nth-child(3) a","name":"span|text","url":"|attr:href"},"chapter":{"sel":".ctop select#chapter option:not([disabled]):not([value=\"\"])","label":"|text","url":"|attr:value"}},"search":{"title":{"sel":".listupd .lastest-serie","name":".lastest-title|text","url":"a|attr:href","img":"img.ts-post-image|attr-contain:src","chapter":{"sel":".lastest-chap > a","label":"li|text","url":"|attr:href","at":"li span|text"}}}},{"404":".error-404.not-found","id":"nettruyen","name":"meta[property=\"og:site_name\"]|attr:content","meta":{"updatePath":"","titleBase":"truyen-tranh","readerBase":"truyen-tranh/{titleSlug}","searchBase":"tim-truyen?keyword=","defaultLang":"vi","titleIdType":"id"},"update":{"title":{"sel":".items > .row > .item","id":".comic-item|attr:data-id","name":"h3 a|text","img":".image img|attr-contain:src","url":"h3 a|attr:href","chapter":{"sel":".chapter","label":"a|text","url":"a|attr:href","at":".time|text"}}},"title":{"sel":"#nt_listchapter nav > ul","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":{"sel":".reading .reading-detail","label":"a.itemcrumb.active > span[itemprop=\"name\"]|text","img":".reading-detail > .page-chapter > img,.reading-detail > img|[attr:data-original,attr-contain:src]","prev":"a.prev.a_prev:not(.disabled)|attr:href","next":"a.next.a_next:not(.disabled)|attr:href","title":{"sel":"h1.txt-primary a","id":".follow-link[data-id]|attr:data-id","name":"|text","url":"|attr:href"}},"search":{"title":{"sel":".items > .row > .item","name":"h3 a|text","img":".image img|attr-contain:src","url":"h3 a|attr:href"}}},{"id":"manga4life","name":"#Nav .LogoBox a|attr:title","meta":{"updatePath":"","titleBase":"manga","readerBase":"read-online","searchBase":"search/?name=","defaultLang":"en","titleIdType":"slug"},"update":{"title":{"sel":".BoxBody.LatestChapters .Chapter","name":".Image > a|attr:title","img":".Image > a img|attr-contain:src","url":".Image > a|attr:href","chapter":{"sel":".Label > a","label":".ChapterLabel|text","url":"|attr:href","at":".DateLabel|text"}}},"title":{"sel":".BoxBody div.list-group[ng-if^=\"vm.Chapters\"]","name":".BoxBody h1|text","img":"meta[property=\"og:image\"],meta[property=\"twitter:image:src\"]|attr:content","tags":"a[href*=\"search/?genre=\"]|text","type":"a[href*=\"search/?type=\"]|text"},"reader":{"sel":"#TopPage.ImageGallery","label":"button[data-target=\"#ChapterModal\"]|text","img":".ImageGallery img.img-fluid|attr:ng-src","title":{"sel":".DesktopNav a","name":"|text","url":"|attr:href"}},"search":{"title":{"sel":".SearchFilterNav + .row > div[ng-repeat^=\"Series\"]","name":"div:nth-child(2) a.SeriesName|text","img":"img|attr-contain:src","url":"a|attr:href"}}},{"id":"mangadex","name":"meta[property='og:site_name']|attr:content","meta":{"updatePath":"titles/latest","titleBase":"title","readerBase":"chapter","searchBase":"titles?q=","defaultLang":"en","multiLang":true,"titleIdType":"slug"},"fetchOverrides":[{"type":"updates","match":"^api\\.mangadex\\.org\\/(chapter|manga)$","params":[{"key":"limit","value":"96"},{"key":"contentRating[]","value":"pornographic"}]},{"type":"chapters","match":"^api\\.mangadex\\.org\\/manga\\/.+\\/feed$","params":[{"id":"limit","key":"limit","value":"500"},{"id":"lang","key":"translatedLanguage[]"}]}]},{"id":"comick","name":"meta[property=\"og:site_name\"],meta[name=\"application-name\"]|attr:content","meta":{"home":"home","updatePath":"home","titleBase":"comic","readerBase":"comic/{titleSlug}","searchBase":"search?q=","defaultLang":"en","multiLang":true,"titleIdType":"id"},"fetchOverrides":[{"type":"updates","match":"^api\\.comick\\.app\\/chapter$","params":[{"key":"order","value":"new"},{"key":"accept_erotic_content","value":"true"}]},{"type":"chapters","match":"^api\\.comick\\.app\\/comic\\/.+\\/chapters$","params":[{"id":"limit","key":"limit","value":"1000"},{"id":"lang","key":"lang"}]}],"update":{"title":{"sel":"#updates-container div[title]","name":"|attr:title","img":"img|attr-contain:src","url":"a[href^=\"/comic/\"]|attr:href","chapter":{"sel":"a:last-child","label":"div:first-child|text","url":"|attr:href","at":"div:nth-child(2)|text"}}},"title":{"sel":"#chapter-header ~ div table > tbody","name":"h1|text","img":"a[href$=\"/covers\"] > img|attr-contain:src","langs":"#chapter-header + div select option:not([value=\"\"]):not([value=\"all\"])|attr:value","tags":"table a.link[href^=\"/search?genres=\"]|text","type":"h1 ~ div.text-sm span:first-child|row:origination"},"reader":{"lazy":true,"sel":".images-reader-container","label":"select:first-of-type option[selected]|text","img":".images-reader-container img|attr-contain:src","title":{"sel":"div > a[href*=\"/comic/\"]","name":"|text || img[alt]|attr:alt","url":"|attr:href","img":"img|attr-contain:src"},"lang":"select:nth-child(2)|value","prev":".images-reader-container a:first-child[href^=\"/comic/\"]:not(:last-child)|attr:href","next":".images-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","name":".brand img[alt]|attr:alt","meta":{"updatePath":"","titleBase":"series","readerBase":"chapter","searchBase":"search?word=","defaultLang":"en","titleIdType":"slug"},"update":{"title":{"sel":"#series-list > .item","name":"a.item-title|text","img":".item-cover img|attr-contain:src","url":"a.item-title|attr:href","lang":"em[data-lang]|attr:data-lang","chapter":{"sel":".item-volch","label":"a|text","url":"a|attr:href","at":"i|text"}}},"title":{"sel":".detail-set ~ .episode-list","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":{"sel":"#viewer","label":"title|text","img":"img.page-img|attr-contain:src","title":{"sel":"h3.nav-title a","name":"|text","url":"|attr:href"},"lang":"h3.nav-title em[data-lang]|attr:data-lang","prev":".nav-prev > a[href^=\"/chapter/\"]|attr:href","next":".nav-next > a[href^=\"/chapter/\"]|attr:href","chapter":{"sel":".nav-epis > select option:not([disabled]):not([value=\"\"])","label":"|text","url":"|attr:value"}}},{"404":"#error > .attention","id":"mangago","name":"#logo_div|attr:title || meta[property=\"og:site_name\"]|attr:content","meta":{"updatePath":"list/latest","titleBase":"read-manga","readerBase":"read-manga/{titleSlug}","searchBase":"r/l_search/?name=","defaultLang":"en","titleIdType":"slug"},"update":{"title":{"sel":"#search_list > li .box","name":"a.thm-effect|attr:title","img":"a.thm-effect img|attr-contain:src","url":"a.thm-effect|attr:href","chapter":{"sel":"a.chico","label":"|text","url":"|attr:href"}}},"title":{"sel":"#chapter_table","name":".w-title h1|text","img":".article .cover img|attr-contain:src","tags":".manga_right a[href*=\"/genre/\"]|text","chapter":{"sel":"#chapter_table tbody tr","label":"h4 a b|text","url":"h4 a|attr:href","at":"td:last-child|text"}},"reader":{"sel":"#pic_container","label":"#navi h3 span:last-child|text","img":"#pic_container img[id^=\"page\"]|attr-contain:src","title":{"sel":"#navi a#series","name":"|text","url":"|attr:href"},"chapter":{"sel":"ul.dropdown-menu.chapter > li > a","label":"|text","url":"|attr:value"}},"search":{"title":{"sel":"#search_list > li .box","name":"a.thm-effect|attr:title","img":"a.thm-effect img|attr-contain:src","url":"a.thm-effect|attr:href","chapter":{"sel":"a.chico","label":"|text","url":"|attr:href"}}}},{"404":".nf-large + .nf-desc + a[href=\"/home\"]","id":"kakalot","name":"meta[property=\"og:site_name\"]|attr:content","meta":{"home":"home","updatePath":"home","titleBase":"","readerBase":"read/{titleSlug}/{lang}","searchBase":"search?keyword=","defaultLang":"en","multiLang":true,"titleIdType":"id"},"update":{"title":{"sel":"#latest-chap .inner > .item","id":".item-info h3|attr:data-id","name":".item-info h3 a|text","img":".item-poster img|attr-contain:src","url":"a|attr:href","chapter":{"sel":".chapter-list > .cl-item","label":"a.chapter-name|text","url":"a|attr:href","at":".time|text"}}},"title":{"lazy":true,"sel":"#chapt-list .cl-header","id":"#main|attr:data-id","name":".detail-box h3.manga-name|text","img":".detail-box .manga-poster-img|attr-contain:src","tags":".detail-box .line-content a[href*=\"/genre/\"]|text","langs":"#chap-lang .lang-item|attr:data-code","chapter":{"sel":"#chapt-list .reading-list > .item","label":"a.chapter-name|text","url":"a.chapter-name|attr:href","at":".item-time|text"}},"reader":{"sel":"#reading","label":".breadcrumb-item.active|text","img":"#list-image .card-wrap[data-url]|attr:data-url","title":{"sel":".breadcrumb-item:nth-child(2) a","id":"#reading|attr:data-manga-id","name":"|text","url":"|attr:href"},"chapter":{"sel":".kbreadcrumb + .reading-option option.reading-item","label":"|text","url":"|attr:value"}},"search":{"title":{"sel":".manga-list > .inner > .item","name":".manga-name a|attr:title","img":".manga-poster img|attr-contain:src","url":".manga-name a|attr:href","chapter":{"sel":".latest-chapter .chapter-name","label":"|text","url":"|attr:href"}}}},{"id":"reaper","name":"nav a img[alt]|attr:alt","meta":{"updatePath":"latest/comics","titleBase":"comics","readerBase":"comics/{titleSlug}/chapters","searchBase":"?s=","defaultLang":"en","titleIdType":"name"},"update":{"title":{"sel":"main h2 + div .grid.grid-cols-1 > div","img":"a img|attr-contain:src","name":"p a|text","url":"a|attr:href","chapter":{"sel":"p + div > a","label":"|text","url":"|attr:href","at":"p|text"}}},"title":{"sel":"div > ul[role=\"list\"]:first-child","name":"h1|text","img":"main .container img[alt]","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":{"sel":"","label":"title|text","img":"main nav ~ img.max-w-full|attr-contain:src","prev":"main nav:first-of-type > div:first-child a|attr:href","next":"main nav:first-of-type > div:last-child a:last-child:not(:first-child)|attr:href","title":{"sel":"body","name":"main p|text","url":"main nav:first-of-type > div:last-child a:first-child|attr:href"}}}]